NetworkManager/src
Thomas Haller 9440eefb6d platform: use NMDedupMultiIndex for routes in NMPCache
Rework platform object cache to use NMDedupMultiIndex.

Already previously, NMPCache used NMMultiIndex and had thus
O(1) for most operations. What is new is:

- Contrary to NMMultiIndex, NMDedupMultiIndex preserves the order of
  the cached items. That is crucial to handle routes properly as kernel
  will replace the first matching route based on network/plen/metric
  properties. See related bug rh#1337855.
  Without tracking the order of routes as they are exposed
  by kernel, we cannot properly maintain the route cache.

- All NMPObject instances are now treated immutable, refcounted
  and get de-duplicated via NMDedupMultiIndex. This allows
  to have a global NMDedupMultiIndex that can be shared with
  NMIP4Config and NMRouteManager. It also allows to share the
  objects themselves.
  Immutable objects are so much nicer. We can get rid of the
  update pre-hook callback, which was required previously because
  we would mutate the object inplace. Now, we can just update
  the cache, and compare obj_old and obj_new after the fact.

- NMMultiIndex was treated as an internal of NMPCache. On the other
  hand, NMDedupMultiIndex exposes NMDedupMultiHeadEntry, which is
  basically an object that allows to iterate over all related
  objects. That means, we can now lookup objects in the cache
  and give the NMDedupMultiHeadEntry instance to the caller,
  which then can iterate the list on it's own -- without need
  for copying anything.
  Currently, at various places we still create copies of lookup
  results. That can be improved later.

The ability to share NMPObject instances should enable us to
significantly improve performance and scale with large number
of routes.

Of course there is a memory overhead of having an index for each list
entry. Each NMPObject may also require an NMDedupMultiEntry,
NMDedupMultiHeadEntry, and NMDedupMultiBox item, which are tracked
in a GHashTable. Optimally, one NMDedupMultiHeadEntry is the head
for multiple objects, and NMDedupMultiBox is able to deduplicate several
NMPObjects, so that there is a net saving.
Also, each object type has several indexes of type NMPCacheIdType.
So, worst case an NMPlatformIP4Route in the platform cache is tracked
by 8 NMPCacheIdType indexes, for each we require a NMDedupMultiEntry,
plus the shared NMDedupMultiHeadEntry. The NMDedupMultiBox instance
is shared between the 8 indexes (and possibly other).
2017-07-05 18:37:38 +02:00
..
devices core: pass NMDedupMultiIndex instance to NMIP4Config and other 2017-07-05 14:22:10 +02:00
dhcp core: refactor NMIP4Config to use dedup-index for IPv4 routes 2017-07-05 14:22:10 +02:00
dns core: refactor NMIP4Config to use dedup-index for IPv4 routes 2017-07-05 14:22:10 +02:00
dnsmasq dnsmasq: fix generating shared IPv4 address range 2017-05-29 11:10:36 +02:00
ndisc ndisc: log the device context 2017-03-24 12:42:09 +01:00
platform platform: use NMDedupMultiIndex for routes in NMPCache 2017-07-05 18:37:38 +02:00
ppp core: pass NMDedupMultiIndex instance to NMIP4Config and other 2017-07-05 14:22:10 +02:00
settings Move CONF_DHCP definition to nm-hostname-manager.c 2017-06-27 09:05:42 +02:00
supplicant core,cli: replace wrong pattern for clearing GError 2017-06-27 09:42:28 +02:00
systemd systemd: merge branch systemd into master 2017-06-14 13:10:05 +02:00
tests core: refactor NMIP4Config to use dedup-index for IPv4 routes 2017-07-05 14:22:10 +02:00
vpn core: refactor NMIP4Config to use dedup-index for IPv4 routes 2017-07-05 14:22:10 +02:00
main-utils.c config: add first_start paramter to NMConfig to detect restart 2017-04-20 14:19:56 +02:00
main-utils.h all: cleanup includes in header files 2016-08-17 19:51:17 +02:00
main.c core: don't enable setrlimit(RLIMIT_CORE) when running with address sanitizer 2017-05-24 13:56:12 +02:00
NetworkManagerUtils.c all: fix typo 'entires' -> 'entries' 2017-05-05 19:14:19 +02:00
NetworkManagerUtils.h manager: simplify searching assumed connection 2017-03-16 18:27:33 +01:00
nm-act-request.c active-connection: emit a StateChanged signal on state changes 2017-03-17 10:21:19 +01:00
nm-act-request.h core: add activation-type property to active-connection 2017-03-16 18:27:33 +01:00
nm-active-connection.c device: fix taking over device after modifying external connection 2017-06-19 14:57:48 +02:00
nm-active-connection.h active-connection: emit a StateChanged signal on state changes 2017-03-17 10:21:19 +01:00
nm-audit-manager.c logging: log device and connection along with the message 2017-03-24 12:42:09 +01:00
nm-audit-manager.h audit: add @args to device logging functions 2017-03-06 10:29:37 +01:00
nm-auth-manager.c logging: log device and connection along with the message 2017-03-24 12:42:09 +01:00
nm-auth-manager.h core: refactor private data in "src" 2016-10-04 09:50:56 +02:00
nm-auth-subject.c all: use "unsigned long" instead of "long unsigned" 2017-03-14 11:23:46 +01:00
nm-auth-subject.h auth: embed private data NMAuthSubjectPrivate in NMAuthSubject struct 2016-05-12 10:24:36 +02:00
nm-auth-utils.c auth-utils: fix possibly uninitialized variables 2017-04-07 11:52:16 -05:00
nm-auth-utils.h all: move NM_AUTH_PERMISSION_* defines to "nm-common-macros.h" header 2016-06-01 19:06:35 +02:00
nm-bus-manager.c core: introduce default logging macros 2016-10-14 15:57:43 +02:00
nm-bus-manager.h core: refactor private data in "src" 2016-10-04 09:50:56 +02:00
nm-checkpoint-manager.c build: don't add subdirectories to include search path but require qualified include 2016-11-21 14:26:37 +01:00
nm-checkpoint-manager.h core: refactor private data in "src" 2016-10-04 09:50:56 +02:00
nm-checkpoint.c checkpoint: disconnect device before reactivation during rollback 2017-07-05 11:01:56 +02:00
nm-checkpoint.h checkpoint: introduce new flags to better restore previous state 2016-10-24 09:57:18 +02:00
nm-config-data.c device: handle default for unset ignore-carrier option depending on device 2017-06-22 13:26:53 +02:00
nm-config-data.h core: allow setting SR-IOV num_vfs 2017-04-18 23:10:36 +02:00
nm-config.c config: allow persisting the device nm-owned state 2017-06-07 10:27:02 +02:00
nm-config.h config: allow persisting the device nm-owned state 2017-06-07 10:27:02 +02:00
nm-connectivity.c connectivity: fix scheduling periodic connectivity checks 2017-06-02 19:15:30 +02:00
nm-connectivity.h device: add default route penalty only if concheck is enabled 2017-05-04 11:07:40 +02:00
nm-core-utils.c platform: let NMPObject implement NMDedupIndexObj 2017-07-05 14:22:10 +02:00
nm-core-utils.h platform: let NMPObject implement NMDedupIndexObj 2017-07-05 14:22:10 +02:00
nm-dcb.c build: don't add subdirectories to include search path but require qualified include 2016-11-21 14:26:37 +01:00
nm-dcb.h all: cleanup includes in header files 2016-08-17 19:51:17 +02:00
nm-default-route-manager.c all: fix typos in documentation, translated strings and comments 2017-05-28 17:33:37 +02:00
nm-default-route-manager.h device: keep NMNetns instance per device 2017-04-18 15:49:14 +02:00
nm-dhcp4-config.c exported-object: use NM_EXPORT_PATH_NUMBERED() macro 2017-01-03 15:40:17 +01:00
nm-dhcp4-config.h core: refactor private data in "src" 2016-10-04 09:50:56 +02:00
nm-dhcp6-config.c exported-object: use NM_EXPORT_PATH_NUMBERED() macro 2017-01-03 15:40:17 +01:00
nm-dhcp6-config.h core: refactor private data in "src" 2016-10-04 09:50:56 +02:00
nm-dispatcher.c core: refactor NMIP4Config to use dedup-index for IPv4 routes 2017-07-05 14:22:10 +02:00
nm-dispatcher.h core/dispatcher: pass act-request to device dispatcher calls 2017-03-16 18:27:33 +01:00
nm-exported-object.c all: use "unsigned long" instead of "long unsigned" 2017-03-14 11:23:46 +01:00
nm-exported-object.h exported-object: add "path" GObject property to have notify signal 2017-01-25 13:12:08 +01:00
nm-firewall-manager.c firewall: use CList to track pending_calls 2017-05-11 18:26:10 +02:00
nm-firewall-manager.h firewall: merge "started" signal and "available" property 2017-04-21 09:09:01 +02:00
nm-hostname-manager.c core,cli: replace wrong pattern for clearing GError 2017-06-27 09:42:28 +02:00
nm-hostname-manager.h hostname: cache hostname-manager's hostname property 2017-05-12 17:29:33 +02:00
nm-iface-helper.c core: pass NMDedupMultiIndex instance to NMIP4Config and other 2017-07-05 14:22:10 +02:00
nm-ip4-config.c core: refactor NMIP4Config to use dedup-index for IPv4 routes 2017-07-05 14:22:10 +02:00
nm-ip4-config.h core: refactor NMIP4Config to use dedup-index for IPv4 routes 2017-07-05 14:22:10 +02:00
nm-ip6-config.c core: pass NMDedupMultiIndex instance to NMIP4Config and other 2017-07-05 14:22:10 +02:00
nm-ip6-config.h core: pass NMDedupMultiIndex instance to NMIP4Config and other 2017-07-05 14:22:10 +02:00
nm-logging.c logging: log device and connection along with the message 2017-03-24 12:42:09 +01:00
nm-logging.h logging: add LOG3 macros 2017-06-08 21:50:23 +02:00
nm-manager.c manager: when a connection is upped on a device, do an early update of its internal state 2017-06-21 16:12:09 +02:00
nm-manager.h hostname: cache hostname-manager's hostname property 2017-05-12 17:29:33 +02:00
nm-multi-index.c all: modify line separator comments to be 80 chars wide 2016-10-03 12:01:15 +02:00
nm-multi-index.h all: cleanup includes in header files 2016-08-17 19:51:17 +02:00
nm-netns.c core: pass NMDedupMultiIndex instance to NMIP4Config and other 2017-07-05 14:22:10 +02:00
nm-netns.h core: pass NMDedupMultiIndex instance to NMIP4Config and other 2017-07-05 14:22:10 +02:00
nm-pacrunner-manager.c core: refactor NMIP4Config to use dedup-index for IPv4 routes 2017-07-05 14:22:10 +02:00
nm-pacrunner-manager.h proxy: introduce call-id for clearing pacmanager configuration 2017-04-23 18:12:09 +02:00
nm-policy.c policy: log policy's orig_hostname 2017-05-12 17:29:33 +02:00
nm-policy.h policy: add support to configurable hostname mode 2017-03-24 15:18:09 +01:00
nm-proxy-config.c proxy: reorder parts in nm-proxy-config.c and nm-pacrunner-manager.c 2016-10-04 11:58:32 +02:00
nm-proxy-config.h proxy: remove unnecessary APIs 2016-10-04 11:44:44 +02:00
nm-rfkill-manager.c udev: drop libgudev in favor of libudev 2017-03-22 12:41:06 +01:00
nm-rfkill-manager.h core: refactor private data in "src" 2016-10-04 09:50:56 +02:00
nm-route-manager.c platform: use NMDedupMultiIndex for routes in NMPCache 2017-07-05 18:37:38 +02:00
nm-route-manager.h device: keep NMNetns instance per device 2017-04-18 15:49:14 +02:00
nm-session-monitor.c session: make systemd-logind and elogind conflicting build options 2017-02-24 13:06:13 +01:00
nm-session-monitor.h core: refactor private data in "src" 2016-10-04 09:50:56 +02:00
nm-sleep-monitor.c session: make systemd-logind and elogind conflicting build options 2017-02-24 13:06:13 +01:00
nm-sleep-monitor.h core: refactor private data in "src" 2016-10-04 09:50:56 +02:00
nm-test-utils-core.h core: pass NMDedupMultiIndex instance to NMIP4Config and other 2017-07-05 14:22:10 +02:00
nm-types.h core: pass NMDedupMultiIndex instance to NMIP4Config and other 2017-07-05 14:22:10 +02:00
org.freedesktop.NetworkManager.conf dbus: allow firewalld to communicate with NetworkManager 2017-04-21 13:38:21 +02:00