Before the change if an alias for a setting name existed, it was used instead of
the real name and TAB-completion for the real name didn't work.
before:
nmcli> goto 802<TAB>
no output
now:
nmcli> goto 802<TAB>
nmcli> goto 802-11-wireless
802-11-wireless 802-11-wireless-security
nmcli> goto <TAB>
802-11-wireless-security (wifi-sec) connection ipv6
802-11-wireless (wifi) ipv4
The properties are not implemented in NM core, nor in ifcfg-rh plugin. Thus
they are not preserved over re-reading from ifcfg-* file. Moreover they are
highly dependent on drivers.
When we allowed editing them, the connection changed after re-reading and
was marked as dirty (and users were puzzled).
Before, whereever a connection id is accepted, the completion only
offered 'id', 'uuid', 'path', etc. With this change, it will additionally
suggest the id of existing connections.
https://bugzilla.redhat.com/show_bug.cgi?id=997997
Signed-off-by: Thomas Haller <thaller@redhat.com>
To support optimal completion, more context must be considered.
Especially the OPTIONS, which must appear before the OBJECT.
Modify bash completion to try parsing first the options.
Before, whenever you had options, completion did not work
anymore (because the object was expected as first argument).
Moreover, options were also suggested after specifying the
object. This is now mitigated by parsing the command line
in two steps.
Signed-off-by: Thomas Haller <thaller@redhat.com>
Unfortunately, $(AM_CPPFLAGS) gets overridden by per-target _CPPFLAGS
variables, which $(INCLUDES) did not, so this requires some additional
changes.
In most places, I have just gotten rid of the per-target _CPPFLAGS
variables; in directories with a single target, the per-target
variable is unnecessary, and in directories with multiple targets, the
per-target variable is often undesirable, since it forces some files
to be compiled twice, even though there ends up being no difference
between the two files.
When reading the property name in edit mode, any white space should be
striped from the entered value. Especially, because tab completion will
add a trailing whitespace.
Example:
$ nmcli connection edit
Enter connection type: ethernet
nmcli> goto connection
nmcli connection> describe
Property name? u<TAB>
The <TAB> will complete 'u' to 'uuid '.
This whitespace should be allowed and striped.
Signed-off-by: Thomas Haller <thaller@redhat.com>
Also sub commands can be abbreviated. Add some more aliases to the bash
completion.
Also fix the option 'nmcli radio mobile' which is called 'wwan'.
Signed-off-by: Thomas Haller <thaller@redhat.com>
nmcli accepts abbreviated versions of object names, e.g. 'con'
instead of 'connection'. Adjust bash completion to also support
this.
Signed-off-by: Thomas Haller <thaller@redhat.com>
Ask for confirmation in these cases:
* autoconnect=yes and connection has not been saved yet
* autoconnect=yes, but saved connection had autoconnect=no
The confirmation can be switched off with
nmcli> nmcli save-confirmation no
The history is saved to ~/.nmcli-history file, separately for each connection.
The file uses glib key-file format. Each group is a connection UUID, keys are
integer numbers (history entry order), and values are the actual commands.
Example ~/.nmcli-history file:
[0bdc9852-2540-4e12-a605-5e65a9483772]
0=help quit
1=print
2=nmcli prompt-color 3
3=help set
4=q
[9142680d-3b87-4feb-ab1e-19e8762329ad]
0=eth
1=set ipv4.addr 1.2.3.4
2=quit
nmcli connection modify [id | uuid | path] <ID> <setting>.<property> [<value>]
missing value means setting the default value (deleting).
Examples:
nmcli con mod ethernet-2 connection.autoconnect no
nmcli con mod "Home Wi-Fi" wifi.mtu 1350
nmcli con mod "T-Mobile 1" gsm.apn internet
nmcli con mod 91782692-512e-4408-9572-667887319ef4 conn.perm user:cimrman
TODO:
- allow modifying multiple properties (using single command)
- Main command loop was moved to run in a separate thread (using GThread).
Otherwise glib main loop would be blocked in processing D-Bus and other
events.
- Handle creating new vs. updating already saved connection.
'change' command puts current value on edit line, so that user can change
it and confirm with <Enter>.
Notes:
* it works for libreadline
* libedit has to be checked
* doesn't work without any edit-line library - how to do that??
property_edit_submenu() is the main function. It is entered from main menu by
'goto'
command.
Commands of this menu:
set - set new value to the property
add - add a value to the property (for non-container properties it is
the same as set)
change - allow editing the current property value
remove - remove the property value(s)
describe - show the property description and/or usage
print - show the property value
back - return to the setting level (main menu)
help - show help (command descriptions)
quit - quit nmcli
So the syntax is now:
nmcli con edit [id | uuid | path ] <ID>
- for editing an existing connection
nmcli con edit [type <new connection type>] [con-name <new connection name>]
- for adding a new connection
Supported libraries are:
GNU Readline (libreadline) http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html
NetBSD Editline (libedit) http://www.thrysoee.dk/editline/
We load these symbols:
readline() - main function allowing getting user input and aditing that
add_history() - stores strings to history
rl_insert_text() - insert text into the line at the current cursor position
rl_startup_hook - hook to call just before readline prints the first prompt
nmcli connection edit [type <type>] [con-name <name>]
Examples:
nmcli c e
nmcli c e type ethernet
nmcli c e type wifi con-name "My home Wi-Fi"
nmcli c e type bond
...
We should also quit on 'DEACTIVATED' state' when monitoring active connection
state.
Reproducer:
nmcli con add con-name myvlan dev eth1 id 88
nmcli -p con up myvlan
Add a "monitor-connection-files" config option, which can be set to
"false" to disable automatic reloading of connections on file change.
To go with this, add a new ReloadConnections method on
o.fd.NM.Settings that can be used to manually reload connections, and
add an nm-cli command to call it.
Optional 'ifname' allowed creating connection applicable to all interfaces,
which was confusing for some users. Now we require the user to provide ifname
to lock the connection for an interface. An "unbound" connection can be
created with ifname "*".
$ nmcli connection add type eth ifname eth0
$ nmcli connection add type eth
now becomes
$ nmcli connection add type eth ifname "*"
bond, bridge:
- when ifname is not specified or is "*",
interface name is generated (nm-bond, nm-bridge)
vlan:
- when ifname is not specified or is "*",
vlan device is named "dev.id"
Note: the quotes around * are required to suppress shell expansion.
* remove "Encrypted" tag
The "Encrypted: " stuff was initially copied from nm-tool, but it doesn't help
here much. See also http://cgit.freedesktop.org/NetworkManager/NetworkManager/commit/?id=a734c836a56f3170202f0555f1a03c9b2835775c
for APs with WPA & RSN IEs, but no privacy flag.
* remove a space from "WPA ", etc. strings. Translators often leave it out
and thus break output.
* change "WPA" to "WPA1" to make it clearer
* use "802.1X" instead of "Enterprise" to save some characters