Commit graph

19225 commits

Author SHA1 Message Date
Thomas Haller
cc5ff98456 merge: bug fixes found via coverity 2017-12-12 11:16:00 +01:00
Thomas Haller
f44f21c87e core: avoid leaks parsing team link-watcher
Found by coverity.
2017-12-12 11:15:38 +01:00
Thomas Haller
c274b565a6 cli: avoid out-of-bounds-read for show_device_info()
Probably not critical, because it will still include
the terminating NULL, and just continue to fill the
temporary buffer with static addresses.

Found by coverity.

Fixes: bfb9fd0d2f
2017-12-12 11:15:38 +01:00
Thomas Haller
62d4dba74b platform: assert() for valid item in nm_platform_link_get_all()
Coverity thinks that item might be NULL, but actually it
cannot. Unclear how to avoid the false positive.
2017-12-12 11:15:38 +01:00
Thomas Haller
27e8fffdb8 platform: fix crash hashing NMPlatformTfilter and NMPlatformQdisc
@kind might be NULL. There are 3 forms of the hash-update functions for
string: str(), str0(), and strarr().

- str0() is when the string might be NULL.
- str() does not allow the string to be NULL
- strarr() is like str(), except it adds a G_STATIC_ASSERT()
  that the argument is a C array.

The reason why a difference between str() and str0() exists, is
because str0() hashes NULL different from a "" or any other string.
This has an overhead, because it effectively must hash another bit
of information that tells whether a string was passed or not.

The reason is, that hashing a tupple of two strings should always
yield a different hash value, even for "aa",""; "a","a"; "","aa",
where naive concatentation would yield identical hash values in all
three cases.

Fixes: e75fc8279b
2017-12-12 11:15:38 +01:00
Thomas Haller
fb2da4b26c libnm: fix checking argument in nm_team_link_watcher_new_arp_ping()
Found by coverity.

Fixes: 6c93e32212
2017-12-12 11:15:38 +01:00
Thomas Haller
a7087b1f05 core: avoid dereferencing NULL in nm_utils_resolve_conf_parse()
Found by coverity.

Fixes: 8f1ef161f4
2017-12-12 11:15:38 +01:00
Thomas Haller
fbc6008260 core: fix uninialized boolean variable in reset_autoconnect_all()
It's not critical, because at worst we get a false-positive that
something changed.

Found by coverity.

Fixes: 4e7b05de79
2017-12-12 11:15:38 +01:00
Lubomir Rintel
f4419783b7 po: translations from the Red Hat translators 2017-12-12 10:49:37 +01:00
Lubomir Rintel
4103c72c15 po: update-po for the translations that are going to be updated
Just so that we get a nicer diff when pulling from the Red Hat Zanata.
2017-12-12 10:49:37 +01:00
Thomas Haller
5201121a1b platform/tests: fix memleaks in tests
Fixes: 0b0fb045bc
2017-12-11 21:01:29 +01:00
Lubomir Rintel
9c03a813e0 libnm: move symbols that were backported to 1.10.2 before 1.12 to libnm_1_10_2
See also: ae5af6b368
2017-12-11 20:22:30 +01:00
Lubomir Rintel
9639a176ff device: ensure simple action sdata is a NUL-terminated bytestring 2017-12-11 18:49:48 +01:00
Thomas Haller
023ce50d21 settings: mark the connection as UNSAVED if it was modified in-memory 2017-12-11 18:48:47 +01:00
Thomas Haller
e8299e30b8 settings: for persist-mode KEEP do not ever save the connection to disk
KEEP means to don't do anything, really.
2017-12-11 18:37:49 +01:00
Thomas Haller
7044febf97 settings: fix clearing nm-generated/volatile flags of connection
There are a few cases where we don't want to clear a potential
nm-generated/volatile flag, but only mark the connection as
unsaved.

Otherwise, we wrongly end up clearing these flags and the connection
is wrongly not NM_DEVICE_SYS_IFACE_STATE_EXTERNAL.

Fixes: 35dc6421de
2017-12-11 12:12:08 +01:00
Lubomir Rintel
e75fc8279b lr/tc: initial support for TC qdiscs and filters
https://bugzilla.gnome.org/show_bug.cgi?id=790630
2017-12-11 11:20:50 +01:00
Lubomir Rintel
902bbfdb18 ifcfg-rh: add tc support
Format:

  QDISC1=ingress
  QDISC2="root handle 1234: fq_codel"
  FILTER1="parent ffff: matchall action simple sdata Input"
  FILTER2="parent 1234: matchall action simple sdata Output"
2017-12-11 11:20:13 +01:00
Lubomir Rintel
8bffb2c750 device: set traffic filters when device comes up 2017-12-11 11:20:13 +01:00
Thomas Haller
fe3d7209e7 platform: fix TC to-string/hash/cmp functions to include the action
Also add a define NM_PLATFORM_ACTION_KIND_SIMPLE. It makes the
uses of "simple" grepable.
2017-12-11 11:08:41 +01:00
Lubomir Rintel
b0fd3ecbaf platform: add support for traffic filters 2017-12-11 11:08:41 +01:00
Lubomir Rintel
3261820004 clients: add tc tfilter support
What works:

  nmcli c add con-name dum0 ifname dum0 type dummy \
      tc.tfilters 'parent 1234: matchall action drop, parent ffff: matchall action drop'
  nmcli c modify dum0 -tc.tfilters 'parent ffff: matchall action drop'
  nmcli c modify dum0 +tc.tfilters 'parent ffff: matchall action simple sdata Hello'
2017-12-11 11:02:04 +01:00
Lubomir Rintel
bc471c8e7a keyfile/tests: test tc traffic filter reading and writing 2017-12-11 11:02:04 +01:00
Lubomir Rintel
2e8fc6947d keyfile: add ability to read/write tc filters
The idea is

  tfilter.<parent>=[handle <handle>] <tfilter> [<options>] [action [<action options>...]]

What works now:

  [tc]
  qdisc.root=handle 1234: fq_codel
  qdisc.ffff:fff1=ingress
  tfilter.1234:=matchall action drop
  tfilter.ffff:=matchall action simple sdata Hello
2017-12-11 11:02:04 +01:00
Thomas Haller
7cd2b6178d libnm: disable g_warning() from library
Printing a g_warning() from the library is not helpful.

Client-side, libnm should support newer server versions and changing
formats. To support forward-compatibility, it should parse the received
GVariant best-effort like, without complaining.

Server-side, libnm-core should return errors when receiving invalid
configuration. It must not maintain forward-compatibility, only
backward-compatibility -- which is implemented by handling old
and newer formats. But never should server allow a configuration
that is invalid.

Currently, the libnm API cannot yet fail at this point. Hence,
it cannot return an error. It would need a strict and relaxed
parsing mode. Until that exists, just comment out the warnings.
2017-12-11 11:02:04 +01:00
Lubomir Rintel
dbef7e684f libnm-core/tests: test NMSettingTCConfig traffic filter support 2017-12-11 11:02:04 +01:00
Lubomir Rintel
de41c45e61 libnm-core: add functionality for dealing with tc-style traffic filter specifiers
Tailored to fit both nmcli and keyfile needs.
2017-12-11 11:02:04 +01:00
Lubomir Rintel
e035cb7be0 libnm-core: add traffic filter support to NMSettingTCConfig 2017-12-11 11:02:04 +01:00
Lubomir Rintel
883e565b7d libnm-core/tests: test NMSettingTCConfig action support 2017-12-11 11:02:04 +01:00
Lubomir Rintel
733464ada3 libnm-core: add functionality for dealing with tc-style action specifiers
Tailored to fit both nmcli and keyfile needs.
2017-12-11 11:02:04 +01:00
Thomas Haller
b0ba17e903 libnm-core: consider attributes in nm_tc_action_equal() 2017-12-11 11:01:59 +01:00
Lubomir Rintel
7c8ce778fb libnm-core: add action support to NMSettingTCConfig
The actions are not too useful my themselves, but it will be possible to
embed them into traffic filters in subsequent commits.
2017-12-11 10:52:23 +01:00
Lubomir Rintel
e4bdb21909 device: set qdiscs when device comes up 2017-12-11 10:52:23 +01:00
Lubomir Rintel
92f8f30d47 clients: add tc qdisc support
What works:

  nmcli c add con-name dum0 ifname dum0 type dummy \
      tc.qdiscs 'ingress, root pfifo_fast'
  nmcli c modify dum0 -tc.qdiscs 'root pfifo_fast'
  nmcli c modify dum0 +tc.qdiscs 'root handle 666: fq_codel'
2017-12-11 10:52:23 +01:00
Lubomir Rintel
8547387942 keyfile/tests: test tc qdisc reading and writing 2017-12-11 10:52:23 +01:00
Lubomir Rintel
9d0eeb30b6 keyfile: add ability to read/write qdiscs from tc setting
The format for qdiscs is

  qdisc.<parent>=[handle <handle>] <qdisc> [<options>...]

E.g.:

  [tc]
  qdisc.root=fq_codel handle de4d:
  qdisc.ffff:fff1=ingress

That is pretty much what is supported at this point.
2017-12-11 10:52:23 +01:00
Lubomir Rintel
0ab77ebd1d libnm-core/tests: test NMSettingTCConfig qdisc support
...so that we have an excuse when it breaks.
2017-12-11 10:52:22 +01:00
Lubomir Rintel
7c1de05f41 libnm-core: add functionality for dealing with tc-style qdisc specifiers
Tailored to fit both nmcli and keyfile needs.
2017-12-11 10:52:22 +01:00
Lubomir Rintel
da13c7a1a4 libnm-core: add NMSettingTCConfig with qdisc support
Currently is only able to hold the queueing disciplines.
2017-12-11 10:52:22 +01:00
Lubomir Rintel
0b0fb045bc platform/tests: tests qdisc caching behavior
Just the most rudimentary tests.
2017-12-11 10:52:22 +01:00
Lubomir Rintel
ff9f27eb12 platform: add support for queueing disciplines 2017-12-11 10:52:22 +01:00
Thomas Haller
82befe3c40 platform: add <linux/tc_act/tc_defact.h> header
We're going to need that one for TC filter & action support.

<linux/tc_act/tc_defact.h> was moved to user-space API only in 2013
by commit 5bc3db5c9ca8407f52918b6504d3b27230defedc. Our travis CI currently
fails to build due to that.

Re-implement the header.
2017-12-11 10:50:43 +01:00
Thomas Haller
7573594a21 platform: merge nm_platform_*_delete() delete functions
It only makes sense to call delete() with NMPObjects that
we obtained from the platform cache. Otherwise, if we didn't
get it from the cache in the first place, we wouldn't know
what to delete.

Hence, the input argument is (almost) always an NMPObject
in the first place. That is different from add(), where
we might create a new specific NMPlatform* instance on the
stack. For add() it makes slightly more sense to have different
functions depending on the type. For delete(), it doesn't.
2017-12-11 10:30:26 +01:00
Lubomir Rintel
44be0dfca7 platform/nmp-object: (trivial) keep enum ordered by a numeric value 2017-12-11 10:30:26 +01:00
Lubomir Rintel
ffe89f86e0 platform/linux: stringify also NLMSG_* in logs 2017-12-11 10:30:26 +01:00
Lubomir Rintel
273fb58e35 generate-setting-docs: document aa{sv} type
Will be useful for tc qdiscs.
2017-12-11 10:30:26 +01:00
Lubomir Rintel
93ac0e455b platform/trivial: s/ADDRROUTE/OBJECT/ for the cache lookup
It's going to be useful for other objects that have a type (of course)
and an ifindex.
2017-12-11 10:30:26 +01:00
Lubomir Rintel
18dd937b81 libnm-core/utils: allow use of bytestring with attributes 2017-12-11 10:30:26 +01:00
Lubomir Rintel
47b1dc3828 libnm-core/utils: add some special properties for the attributes
"no_value" indicates that the the attribute is a single word, not a
key=value pair. If the type is BOOLEAN then the attribute is considered
true, if it's a STRING then the key is used instead of a value.

"consumes_rest" indicates that the particular key takes the unparseable
tail of the string for a value.

This allows parsing tc-style strings. Consider this filter:

              ,------ regular key/value pair
       ,-----'----.
  root handle 1234: matchall action simple foo bar baz
    |                  |     `-----------.-----------'
    |                  |                 `- "", STRING, consumes_rest
    |                  `------------------- "kind", STRING, no_value
    `-------------------------------------- "root', BOOLEAN, no_value
2017-12-11 10:30:26 +01:00
Lubomir Rintel
48a619e62b libnm-core/utils: allow using the same character for key/value and attribute separators
Allows doing a nm_utils_parse_variant_attributes(..., ' ', ' ').
2017-12-11 10:30:26 +01:00