1. 15 Mar, 2019 3 commits
  2. 13 Mar, 2019 19 commits
    • Thomas Haller's avatar
    • Thomas Haller's avatar
      libnm-core: fix type of argument for nm_utils_inet_ntop_dup() · a0d0d4d7
      Thomas Haller authored
      Fixes: 898f7a56 ('libnm: add internal API nm_utils_inet*_ntop_dup()')
    • Thomas Haller's avatar
    • Thomas Haller's avatar
      platform: add NMPRulesManager for syncing routing rules · b8398b9e
      Thomas Haller authored
      Routing rules are unlike addresses or routes not tied to an interface.
      NetworkManager thinks in terms of connection profiles. That works well
      for addresses and routes, as one profile configures addresses and routes
      for one device. For example, when activating a profile on a device, the
      configuration does not interfere with the addresses/routes of other
      devices. That is not the case for routing rules, which are global, netns-wide
      When one connection profile specifies rules, then this per-device configuration
      must be merged with the global configuration. And when a device disconnects later,
      the rules must be removed.
      Add a new NMPRulesManager API to track/untrack routing rules. Devices can
      register/add there the routing rules they require. And the sync method will
      apply the configuration. This is be implemented on top of NMPlatform's
      caching API.
    • Thomas Haller's avatar
    • Thomas Haller's avatar
    • Thomas Haller's avatar
      platform: add support for routing-rule objects and cache them in platform · 9934a6a0
      Thomas Haller authored
      Add and implement NMPlatformRoutingRule types and let the platform cache
      handle rules.
      Rules are special in two ways:
      - they don't have an ifindex. That makes them different from all other
        currently existing NMPlatform* types, which have an "ifindex" field and
        "implement" NMPlatformObjWithIfindex.
      - they have an address family, but contrary to addresses and routes, there
        is only one NMPlatformRoutingRule object to handle both address
      Both of these points require some special considerations.
      Kernel treats routing-rules quite similar to routes. That is, kernel
      allows to add different rules/routes, as long as they differ in certain
      fields. These "fields" make up the identity of the rules/routes. But
      in practice, it's not defined which fields contribute to the identity
      of these objects. That makes using the netlink API very hard. For
      example, when kernel gains support for a new attribute which
      NetworkManager does not know yet, then users can add two rules/routes
      that look the same to NetworkManager. That can easily result in cache
      Another problem is, that older kernel versions may not yet support all
      fields, which NetworkManager (and newer kernels) considers for identity.
      The older kernel will not simply reject netlink messages with these unknown
      keys, instead it will proceed adding the route/rule without it. That means,
      the added route/rule will have a different identity than what NetworkManager
      intended to add.
    • Thomas Haller's avatar
      platform: separate the refresh-type from the object type · b9ee40b8
      Thomas Haller authored
      Currently, there is a directy one to one relation between
       - NMP_OBJECT_TYPE_*
      For IP addresses, routes and routing policy rules, when we request
      a refresh-all (NLM_F_DUMP), we want to specify the address family.
      For addresses and routes that is currently solved by having two
      sets of NMPObject types, for each address family one.
      I think that is cumbersome because the implementations of both address
      families are quite similar. By implementing both families as different
      object types, we have a lot of duplicate code and it's hard to see where
      the families actually differ. It would be better to have only one NMPObject
      type, but then when we "refresh-all" such types, we still want to be able
      to dump all (AF_UNSPEC) or only a particular address family (AF_INET, AF_INET6).
      Decouple REFRESH_ALL_TYPE_* from NMP_OBJECT_TYPE_* to make that
    • Thomas Haller's avatar
      platform/trivial: rename enum DELAYED_ACTION_IDX_REFRESH_ALL_* to REFRESH_ALL_TYPE_* · 0a2a8617
      Thomas Haller authored
      While these numbers are strongly related to DELAYED_ACTION_TYPE_REFRESH_ALL_*,
      they differ in their meaning.
      These are the refresh-all-types that we support. While some of the delayed-actions
      are indeed for refresh-all, they are not the same thing.
      Rename the enum.
    • Thomas Haller's avatar
      platform: drop unused nm_platform_refresh_all() · 7c5ad2d9
      Thomas Haller authored
      The function is unused. It would require redesign to work with
      future changes, and since it's unused, just drop it.
      The long reasoning is:
          Currently, a refresh-all is tied to an NMPObjectType. However, with
          NMPObjectRoutingRule (for policy-routing-rules) that will no longer
          be the case.
          That is because NMPObjectRoutingRule will be one object type for
          AF_INET and AF_INET6. Contrary to IPv4 addresses and routes, where
          there are two sets of NMPObject types.
          The reason is, that it's preferable to treat IPv4 and IPv6 objects
          similarly, that is: as the same type with an address family property.
          That also follows netlink, which uses RTM_GET* messages for both
          address families, and the address family is expressed inside the
          But then an API like nm_platform_refresh_all() makes little sense,
          it would require at least an addr_family argument. But since the
          API is unused, just drop it.
    • Thomas Haller's avatar
      platform: suppress unnecessary logging in do_request_all_no_delayed_actions() · bbfb8a9b
      Thomas Haller authored
      When we refresh all links, we clear all flags to refresh a specific
      link. However, only log a message if there was anything to clear.
    • Thomas Haller's avatar
      platform: add NULL check in inline nmp_object_unref() function · 2c37a3fb
      Thomas Haller authored
      This allows the compiler to see that this function does nothing for %NULL.
      That is not so unusual, as we use nm_auto_nmpobj to free objects. Often
      the compiler can see that these pointers are %NULL.
    • Thomas Haller's avatar
      platform: add NMPlatformObjWithIfindex helper structure for handling NMPObject types · ac4a1deb
      Thomas Haller authored
      Until now, all implemented NMPObject types have an ifindex field (from
      links, addresses, routes, qdisc to tfilter).
      The NMPObject structure contains a union of all available types, that
      makes it easier to down-case from an NMPObject pointer to the actual
      The "object" field of NMPObject of type NMPlatformObject is the lowest
      common denominator.
      We will add NMPlatformRoutingRules (for policy routing rules). That type
      won't have an ifindex field.
      Hence, drop the "ifindex" field from NMPlatformObject type. But also add
      a new type NMPlatformObjWithIfindex, that can represent all types that
      have an ifindex.
    • Thomas Haller's avatar
    • Thomas Haller's avatar
      platform: drop unnecessary casts from NMP_OBJECT_CAST_*() macros · 8f3724a6
      Thomas Haller authored
      It's wrong to cast here. The caller must always provide an
      NMPObject pointer.
    • Thomas Haller's avatar
    • Thomas Haller's avatar
      shared: add nm_hash_obfuscate_ptr() helper · 237a1723
      Thomas Haller authored
    • Thomas Haller's avatar
      shared: add c_list_length_is() helper · 83fa4aaf
      Thomas Haller authored
    • Thomas Haller's avatar
      contrib: set shift for less in NM-log · bfd6d608
      Thomas Haller authored
  3. 12 Mar, 2019 1 commit
  4. 11 Mar, 2019 3 commits
  5. 09 Mar, 2019 5 commits
  6. 08 Mar, 2019 1 commit
  7. 07 Mar, 2019 8 commits