NetworkManager/libnm-core
Thomas Haller 39ab38a04d core/platform: add support for TUN/TAP netlink support and various cleanup
Kernel recently got support for exposing TUN/TAP information on netlink
[1], [2], [3]. Add support for it to the platform cache.

The advantage of using netlink is that querying sysctl bypasses the
order of events of the netlink socket. It is out of sync and racy. For
example, platform cache might still think that a tun device exists, but
a subsequent lookup at sysfs might fail because the device was deleted
in the meantime. Another point is, that we don't get change
notifications via sysctl and that it requires various extra syscalls
to read the device information. If the tun information is present on
netlink, put it into the cache. This bypasses checking sysctl while
we keep looking at sysctl for backward compatibility until we require
support from kernel.

Notes:

- we had two link types NM_LINK_TYPE_TAP and NM_LINK_TYPE_TUN. This
  deviates from the model of how kernel treats TUN/TAP devices, which
  makes it more complicated. The link type of a NMPlatformLink instance
  should match what kernel thinks about the device. Point in case,
  when parsing RTM_NETLINK messages, we very early need to determine
  the link type (_linktype_get_type()). However, to determine the
  type of a TUN/TAP at that point, we need to look into nested
  netlink attributes which in turn depend on the type (IFLA_INFO_KIND
  and IFLA_INFO_DATA), or even worse, we would need to look into
  sysctl for older kernel vesions. Now, the TUN/TAP type is a property
  of the link type NM_LINK_TYPE_TUN, instead of determining two
  different link types.

- various parts of the API (both kernel's sysctl vs. netlink) and
  NMDeviceTun vs. NMSettingTun disagree whether the PI is positive
  (NM_SETTING_TUN_PI, IFLA_TUN_PI, NMPlatformLnkTun.pi) or inverted
  (NM_DEVICE_TUN_NO_PI, IFF_NO_PI). There is no consistent way,
  but prefer the positive form for internal API at NMPlatformLnkTun.pi.

- previously NMDeviceTun.mode could not change after initializing
  the object. Allow for that to happen, because forcing some properties
  that are reported by kernel to not change is wrong, in case they
  might change. Of course, in practice kernel doesn't allow the device
  to ever change its type, but the type property of the NMDeviceTun
  should not make that assumption, because, if it actually changes, what
  would it mean?

- note that as of now, new netlink API is not yet merged to mainline Linus
  tree. Shortcut _parse_lnk_tun() to not accidentally use unstable API
  for now.

[1] https://bugzilla.redhat.com/show_bug.cgi?id=1277457
[2] https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git/commit/?id=1ec010e705934c8acbe7dbf31afc81e60e3d828b
[3] https://git.kernel.org/pub/scm/network/iproute2/iproute2-next.git/commit/?id=118eda77d6602616bc523a17ee45171e879d1818

https://bugzilla.redhat.com/show_bug.cgi?id=1547213
https://github.com/NetworkManager/NetworkManager/pull/77
2018-03-20 11:59:52 +01:00
..
tests libnm-core: team: add support to runner "random" 2018-02-05 15:24:36 +01:00
crypto.c libnm: refactor loop in crypto_md5_hash() 2016-11-09 12:07:33 +01:00
crypto.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
crypto_gnutls.c crypto: don't try to decrypt PKCS#8 key if no password is supplied 2016-09-23 18:05:54 +02:00
crypto_nss.c all: use "unsigned" instead of "unsigned int" 2017-03-14 11:26:29 +01:00
meson.build libnm: rename "libnm-core/nm-jansson.h" to "libnm-core/nm-json.h" 2018-01-16 14:47:24 +01:00
nm-connection-private.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-connection.c core/connection: don't emit Updated on Connection.GetSecrets 2018-02-20 12:16:21 +01:00
nm-connection.h libnm-core: add NMSettingTCConfig with qdisc support 2017-12-11 10:52:22 +01:00
nm-core-enum-types.c.template build: use template files for enum types' sources generation 2017-12-18 11:25:06 +01:00
nm-core-enum-types.h.template build: use template files for enum types' sources generation 2017-12-18 11:25:06 +01:00
nm-core-internal.h connection: treat connection type's ability to have slaves uniformly 2018-01-18 13:28:12 +01:00
nm-core-types-internal.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-core-types.h libnm-core: add NMSettingTCConfig with qdisc support 2017-12-11 10:52:22 +01:00
nm-dbus-interface.h all: add more meaningful error code for unsupported IP method 2017-12-21 10:02:07 +01:00
nm-dbus-utils.c secret-agent: don't use generated NMDBusSecretAgent proxy 2018-03-12 18:02:20 +01:00
nm-errors.c all: use NM_CACHED_QUARK_FCN() instead of G_DEFINE_QUARK() 2017-02-10 14:33:52 +01:00
nm-errors.h all: add new D-Bus API org.freedesktop.NetworkManager.Settings.Connection.Update2() 2017-12-05 11:50:52 +01:00
nm-json.c libnm-core: don't use RTLD_DEEPBIND when building with asan 2018-02-15 15:34:03 +01:00
nm-json.h libnm: only include "nm-jansson.h" from "nm-json.h" 2018-01-16 14:47:24 +01:00
nm-keyfile-internal.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-keyfile-reader.c libnm/keyfile: refactor cert_parser() by merge helper functions 2018-03-03 16:57:42 +01:00
nm-keyfile-utils.c keyfile: fix escaping ascii control characters in nm_keyfile_key_encode() 2017-11-20 15:39:48 +01:00
nm-keyfile-utils.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-keyfile-writer.c all: drop trailing spaces 2018-02-07 13:32:04 +01:00
nm-property-compare.c libnm-core: add backend for GVariant de/serialization of link_watchers. 2017-12-08 00:46:26 +01:00
nm-property-compare.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-setting-8021x.c libnm: make nm_setting_802_1x_set_private_key() self-assignment safe 2017-12-12 15:19:43 +01:00
nm-setting-8021x.h all: move setting 802-1x.auth-retries to connection.auth-retries 2017-11-02 11:41:01 +01:00
nm-setting-adsl.c libnm: use enum for setting priorities 2017-06-07 09:07:17 +02:00
nm-setting-adsl.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-bluetooth.c core: infer the bluetooth type from the presence of the supplemental settings 2017-08-23 16:18:44 +02:00
nm-setting-bluetooth.h core/bluetooth: add NAP type 2017-05-31 20:15:52 +02:00
nm-setting-bond.c all: don't use NM_FLAGS_HAS() with non-constant argument 2017-12-15 11:48:38 +01:00
nm-setting-bond.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-bridge-port.c all: fix minor typos in settings docs 2017-07-03 21:23:27 +02:00
nm-setting-bridge-port.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-bridge.c libnm: move bridge min/max defines to header file 2017-11-23 18:43:48 +01:00
nm-setting-bridge.h bridge: introduce a bridge.group-forward-mask connection property 2017-07-27 09:35:11 +02:00
nm-setting-cdma.c libnm: use enum for setting priorities 2017-06-07 09:07:17 +02:00
nm-setting-cdma.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-connection.c dhcp: add support for special ipv4.dhcp-client-id types "mac", "perm-mac", and "stable" 2018-02-15 16:24:28 +01:00
nm-setting-connection.h libnm: rename MDns flag UNKNOWN to DEFAULT 2018-01-09 14:24:53 +01:00
nm-setting-dcb.c all: fix minor typos in settings docs 2017-07-03 21:23:27 +02:00
nm-setting-dcb.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-dummy.c libnm: use enum for setting priorities 2017-06-07 09:07:17 +02:00
nm-setting-dummy.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-generic.c libnm: use enum for setting priorities 2017-06-07 09:07:17 +02:00
nm-setting-generic.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-gsm.c all: fix minor typos in settings docs 2017-07-03 21:23:27 +02:00
nm-setting-gsm.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-infiniband.c libnm: use enum for setting priorities 2017-06-07 09:07:17 +02:00
nm-setting-infiniband.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-ip-config.c dns: introduce routing domains 2018-01-12 13:42:08 +01:00
nm-setting-ip-config.h libnm: add NM_IP_ADDRESS_ATTRIBUTE_LABEL define 2017-12-18 12:14:50 +01:00
nm-setting-ip-tunnel.c ip-tunnel: add support for tunnel flags 2018-01-05 18:25:08 +01:00
nm-setting-ip-tunnel.h ip-tunnel: add support for tunnel flags 2018-01-05 18:25:08 +01:00
nm-setting-ip4-config.c man: drop duplicate text from dhcp-client-id description 2018-03-06 15:25:48 +01:00
nm-setting-ip4-config.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-ip6-config.c ifcfg-rh: use separate variables for DNS searches 2017-12-07 09:58:09 +01:00
nm-setting-ip6-config.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-macsec.c libnm: use enum for setting priorities 2017-06-07 09:07:17 +02:00
nm-setting-macsec.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-macvlan.c all: get rid of a handful of unused-but-set variables 2017-12-18 13:29:32 +01:00
nm-setting-macvlan.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-olpc-mesh.c libnm: use enum for setting priorities 2017-06-07 09:07:17 +02:00
nm-setting-olpc-mesh.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-ovs-bridge.c libnm-core: add ovs-bridge setting 2017-10-30 17:40:08 +01:00
nm-setting-ovs-bridge.h libnm-core: add ovs-bridge setting 2017-10-30 17:40:08 +01:00
nm-setting-ovs-interface.c libnm: fix normalizing and verifying OVS connections 2017-10-30 21:46:55 +01:00
nm-setting-ovs-interface.h libnm-core: add ovs-interface setting 2017-10-30 17:40:08 +01:00
nm-setting-ovs-patch.c all: get rid of a handful of unused-but-set variables 2017-12-18 13:29:32 +01:00
nm-setting-ovs-patch.h libnm-core: add ovs-patch setting 2017-10-30 17:40:08 +01:00
nm-setting-ovs-port.c doc: fix type on documentation for NMSettingOvsPort:bond-updelay 2017-11-06 12:26:31 +01:00
nm-setting-ovs-port.h libnm-core: add ovs-port setting 2017-10-30 17:40:08 +01:00
nm-setting-ppp.c libnm: use enum for setting priorities 2017-06-07 09:07:17 +02:00
nm-setting-ppp.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-pppoe.c libnm-core: fix memory leak in NMSettingPppoe 2017-08-30 22:03:59 +02:00
nm-setting-pppoe.h libnm,clients: add 'parent' property to PPPoE setting 2017-08-05 08:03:15 +02:00
nm-setting-private.h all: require glib 2.40 2018-01-18 11:45:36 +01:00
nm-setting-proxy.c libnm: use enum for setting priorities 2017-06-07 09:07:17 +02:00
nm-setting-proxy.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-serial.c libnm: use enum for setting priorities 2017-06-07 09:07:17 +02:00
nm-setting-serial.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-tc-config.c libnm: sort attribute names in nm_tc_action_get_attribute_names() 2017-12-18 12:14:49 +01:00
nm-setting-tc-config.h libnm-core/tc-config: remove deprecation guards from typedefs 2017-12-18 13:29:32 +01:00
nm-setting-team-port.c libnm-core: team-port: expose the new link-watchers property 2017-12-08 00:46:26 +01:00
nm-setting-team-port.h libnm-core: team-port: expose the new link-watchers property 2017-12-08 00:46:26 +01:00
nm-setting-team.c all: replace non-leading tabs with spaces 2018-02-07 13:32:04 +01:00
nm-setting-team.h libnm-core: team: add support to runner "random" 2018-02-05 15:24:36 +01:00
nm-setting-tun.c core/platform: add support for TUN/TAP netlink support and various cleanup 2018-03-20 11:59:52 +01:00
nm-setting-tun.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-user.c all: use nm_str_hash() instead of g_str_hash() 2017-11-16 11:49:52 +01:00
nm-setting-user.h libnm: add NMSettingUser 2017-03-28 14:58:21 +02:00
nm-setting-vlan.c libnm: use enum for setting priorities 2017-06-07 09:07:17 +02:00
nm-setting-vlan.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-vpn.c trivial: avoid XXX tag and replace by NOTE or FIXME 2018-01-23 12:55:33 +01:00
nm-setting-vpn.h libnm: add nm_setting_vpn_get_data_keys() and nm_setting_vpn_get_secret_keys() API 2017-11-23 14:44:25 +01:00
nm-setting-vxlan.c libnm: use enum for setting priorities 2017-06-07 09:07:17 +02:00
nm-setting-vxlan.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-wimax.c libnm: use enum for setting priorities 2017-06-07 09:07:17 +02:00
nm-setting-wimax.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-wired.c all: use nm_str_hash() instead of g_str_hash() 2017-11-16 11:49:52 +01:00
nm-setting-wired.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-wireless-security.c wifi: add support for FILS 2018-01-16 15:01:59 +01:00
nm-setting-wireless-security.h wifi: add support for FILS 2018-01-16 15:01:59 +01:00
nm-setting-wireless.c docs: fix spelling errors in tranlated strings and documentation 2017-08-11 11:05:12 +02:00
nm-setting-wireless.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting.c all: require glib 2.40 2018-01-18 11:45:36 +01:00
nm-setting.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-simple-connection.c libnm-core: add _nm_simple_connection_new_from_dbus() function 2016-03-26 12:10:54 +01:00
nm-simple-connection.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-utils-private.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-utils.c all: require glib 2.40 2018-01-18 11:45:36 +01:00
nm-utils.h libnm-core: add functionality for dealing with tc-style traffic filter specifiers 2017-12-11 11:02:04 +01:00
nm-version.h version: rename macro NM_VERSION_CUR_STABLE to NM_API_VERSION 2018-01-23 10:54:11 +01:00
nm-vpn-dbus-interface.h libnm: revert coercing NMVpnConnectionStateReason to NMActiveConnectionStateReason 2017-03-17 13:00:32 +01:00
nm-vpn-editor-plugin.c all: modify line separator comments to be 80 chars wide 2016-10-03 12:01:15 +02:00
nm-vpn-editor-plugin.h all: replace non-leading tabs with spaces 2018-02-07 13:32:04 +01:00
nm-vpn-plugin-info.c all: use nm_utils_strv_find_first() from shared/nm-utils 2017-02-04 17:55:30 +01:00
nm-vpn-plugin-info.h libnm/vpn: pass NMVpnPluginInfo to the NMVpnEditorPlugin instance 2016-06-15 10:32:32 +02:00