1. 01 Dec, 2018 3 commits
  2. 29 Nov, 2018 12 commits
    • Lubomir Rintel's avatar
      all: say Wi-Fi instead of "wifi" or "WiFi" · b385ad01
      Lubomir Rintel authored
      Correct the spelling across the *entire* tree, including translations,
      comments, etc. It's easier that way.
      
      Even the places where it's not exposed to the user, such as tests, so
      that we learn how is it spelled correctly.
      b385ad01
    • Lubomir Rintel's avatar
      wifi/olpc-mesh: allow autoconnect · 3a999475
      Lubomir Rintel authored
      There's no reason the mesh shouldn't autoconnect. Almost.
      
      The mesh and regular Wi-Fi shares the same radio. There, in the first
      place, probably shouldn't have been separate NMDevices. Not sure whether
      we can fix it at this point, but we can surely avoid unnecessary
      competition between the two devices: give the regular Wi-Fi priority and
      only connect mesh if the regular companion stays disconnected.
      
      For the record; connections shipped on XO-1 laptops all have
      autoconnect=off and thus are not affected by this.
      3a999475
    • Lubomir Rintel's avatar
      wifi/wext: fix double quoting · 64b95d56
      Lubomir Rintel authored
      _nm_utils_ssid_to_string_arr() already escapes/quotes the string.
      64b95d56
    • Lubomir Rintel's avatar
      wifi: do not persist the mac address on AddAndActivate · d64e5772
      Lubomir Rintel authored
      If the client wants to pinpoint the connection to a particular device
      they can just add an appropriate property.
      
      That said, MAC address probably even doesn't count as appropriate; an
      interface name is supposed to stay stable and could be used in such
      cases.
      
      This fixes the case where "nmcli d wifi connect ..." ends up with a
      connection tied to a rather random device that happened to be around
      even without the "ifname" argument.
      d64e5772
    • Thomas Haller's avatar
    • Thomas Haller's avatar
      device: avoid taking down link to change MAC address · e206a347
      Thomas Haller authored
      A lot of drivers actually support changing the MAC address of a link
      without taking it down.
      
      Taking down a link is very bad, because kernel will remove routes
      and IPv6 addresses.
      
      For example, if the user used a dispatcher script to add routes,
      these will be lost. Note that we may change the MAC address of a
      device any time. For example, a VLAN device watches the parent's
      MAC address and configures it (with a logging message "parent hardware
      address changed to ...").
      
      Try first whether we can change the MAC address without taking the
      link down. Only if that fails, retry with taking it down first.
      
      https://bugzilla.redhat.com/show_bug.cgi?id=1639274
      e206a347
    • Thomas Haller's avatar
      platform: add nm_platform_link_get_ifi_flags() helper · b445b1f8
      Thomas Haller authored
      Add helper nm_platform_link_get_ifi_flags() to access the
      ifi-flags.
      
      This replaces the internal API _link_get_flags() and makes it public.
      However, the return value also allows to distinguish between errors
      and valid flags.
      
      Also, consider non-visible links. These are links that are in netlink,
      but not visible in udev. The ifi-flags are inherrently netlink specific,
      so it seems wrong to pretend that the link doesn't exist.
      b445b1f8
    • Sebastien Fabre's avatar
      dbus: register object manager object before requesting dbus name · dc0cdbb5
      Sebastien Fabre authored
      Working on NetworkManager 1.12.4 and sometimes (rarely), when creating
      a NM client object before NetworkManager service start, this object will
      never be running.
      In that case, we can see the following log:
      "[GLIB-GLib-GIO WARN] Error calling GetManagedObjects() when name
      owner :1.5 for name org.freedesktop.NetworkManager came back:
      GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod:
      No such interface 'org.freedesktop.DBus.ObjectManager' on object
      at path /org/freedesktop".
      
      Object Manager object shall be registered before requesting dbus name
      to be sure that 'org.freedesktop.Dbus.ObjectManager' interface is present
      when name owner change is received by libnm.
      
      !51
      dc0cdbb5
    • Thomas Haller's avatar
      dhcp: disable systemd's dhcp_identifier_set_iaid() · 80ac8e40
      Thomas Haller authored
      dhcp_identifier_set_iaid() is no longer called. Replace
      the code with an assertion and always fail.
      
      The function was already annoying previously, because it would
      require udev API to generate the IAID. So, we were already required
      to patch this function.
      80ac8e40
    • Thomas Haller's avatar
      dhcp: always explicitly set IAID of internal DHCPv6 client · f2f44a7a
      Thomas Haller authored
      During start, sd_dhcp6_client would call client_ensure_iaid(),
      to initialize the IAID.
      
      First of all, the IAID is important to us, we should not leave the
      used IAID up to an implementation detail. In the future, we possibly
      want to make this configurable.
      
      The problem is that client_ensure_iaid() calls dhcp_identifier_set_iaid()
      which looks up the interface name via if_indextoname() (in our fork).
      The problem is that dhcp_identifier_set_iaid() looks up information by
      quering the system, which makes it hard for testing and also makes it
      unpredictable. It's better to use our implementation nm_utils_create_dhcp_iaid(),
      which is solely based on the interface-name, which is given as a well
      defined parameter to the DHCP client instance.
      f2f44a7a
    • Thomas Haller's avatar
      core: add nm_utils_create_dhcp_iaid() util · 0ae18f06
      Thomas Haller authored
      Split out nm_utils_create_dhcp_iaid(), we will need it later.
      This is also a re-implementation of systemd's dhcp_identifier_set_iaid().
      0ae18f06
    • Thomas Haller's avatar
      dhcp6-client: handle IAID with value zero · 39a13231
      Thomas Haller authored
      config_parse_iaid(), dhcp_identifier_set_iaid() and sd_dhcp6_client_set_iaid() all
      allow for the IAID to be zero. Also, RFC 3315 makes no mention that zero
      would be invalid.
      
      However, client_ensure_iaid() would take an IAID of zero as a sign that
      the values was unset. Fix that by keeping track whether IAID is
      initialized.
      
      https://github.com/systemd/systemd/pull/10895
      https://github.com/systemd/systemd/commit/0e408b82b8bd7675234cf58009475d4f4c0a491a
      39a13231
  3. 28 Nov, 2018 2 commits
    • Thomas Haller's avatar
      shared: thread safe initialization of nm_utils_get_monotonic_timestamp*() · 32073288
      Thomas Haller authored
      nm_utils_get_monotonic_timestamp*() inherrently use static data. Let's
      initialize it in a thread safe manner.
      
      nm_utils_get_monotonic_timestamp*() are a fundamental utility function
      that should work correctly in all cases. Such a low level function should
      be thread safe.
      32073288
    • Thomas Haller's avatar
      platform/tests: fix assertion for unit test for address lifetime · e180464b
      Thomas Haller authored
      Sometimes the test fail:
      
          $ make -j 10 src/platform/tests/test-address-linux
          $ while true; do
                NMTST_DEBUG=d ./tools/run-nm-test.sh src/platform/tests/test-address-linux 2>&1 > log.txt || break;
            done
      
      fails with:
      
          ERROR: src/platform/tests/test-address-linux - Bail out! test:ERROR:src/platform/tests/test-common.c:790:nmtstp_ip_address_assert_lifetime: assertion failed (adr <= lft): (1001 <= 1000)
      
      That is, because of a wrong check. Fix it.
      e180464b
  4. 27 Nov, 2018 1 commit
  5. 23 Nov, 2018 2 commits
    • Beniamino Galvani's avatar
      team: make teamd log to syslog · 94ea3a5e
      Beniamino Galvani authored
      When teamd is started in foreground it logs to stderr and its output
      appears in the journal as coming from NM, which is quite confusing.
      
      Use the new TEAM_LOG_OUTPUT environment variable [1] to tell teamd to
      log through syslog, unless NetworkManager is in debug mode.
      
      [1] https://github.com/jpirko/libteam/commit/e47d5db53873
      
      https://bugzilla.redhat.com/show_bug.cgi?id=1596917
      94ea3a5e
    • Thomas Haller's avatar
      systemd: update code from upstream (2018-11-23) · 48d64de1
      Thomas Haller authored
      This is a direct dump from systemd git.
      
      ======
      
      SYSTEMD_DIR=../systemd
      COMMIT=91540eaa5c636f4073955f025c4e72b1bbb4f2e9
      
      (
        cd "$SYSTEMD_DIR"
        git checkout "$COMMIT"
        git reset --hard
        git clean -fdx
      )
      
      git ls-files :/src/systemd/src/ \
                   :/shared/nm-utils/unaligned.h | \
        xargs -d '\n' rm -f
      
      nm_copy_sd() {
          mkdir -p "./src/systemd/$(dirname "$1")"
          cp "$SYSTEMD_DIR/$1" "./src/systemd/$1"
      }
      
      nm_copy_sd_shared() {
          mkdir -p "./shared/nm-utils/"
          cp "$SYSTEMD_DIR/$1" "./shared/nm-utils/${1##*/}"
      }
      
      nm_copy_sd "src/basic/alloc-util.c"
      nm_copy_sd "src/basic/alloc-util.h"
      nm_copy_sd "src/basic/async.h"
      nm_copy_sd "src/basic/env-util.c"
      nm_copy_sd "src/basic/env-util.h"
      nm_copy_sd "src/basic/escape.c"
      nm_copy_sd "src/basic/escape.h"
      nm_copy_sd "src/basic/ether-addr-util.c"
      nm_copy_sd "src/basic/ether-addr-util.h"
      nm_copy_sd "src/basic/extract-word.c"
      nm_copy_sd "src/basic/extract-word.h"
      nm_copy_sd "src/basic/fileio.c"
      nm_copy_sd "src/basic/fileio.h"
      nm_copy_sd "src/basic/fd-util.c"
      nm_copy_sd "src/basic/fd-util.h"
      nm_copy_sd "src/basic/fs-util.c"
      nm_copy_sd "src/basic/fs-util.h"
      nm_copy_sd "src/basic/hash-funcs.c"
      nm_copy_sd "src/basic/hash-funcs.h"
      nm_copy_sd "src/basic/hashmap.c"
      nm_copy_sd "src/basic/hashmap.h"
      nm_copy_sd "src/basic/hexdecoct.c"
      nm_copy_sd "src/basic/hexdecoct.h"
      nm_copy_sd "src/basic/hostname-util.c"
      nm_copy_sd "src/basic/hostname-util.h"
      nm_copy_sd "src/basic/in-addr-util.c"
      nm_copy_sd "src/basic/in-addr-util.h"
      nm_copy_sd "src/basic/io-util.c"
      nm_copy_sd "src/basic/io-util.h"
      nm_copy_sd "src/basic/list.h"
      nm_copy_sd "src/basic/log.h"
      nm_copy_sd "src/basic/macro.h"
      nm_copy_sd "src/basic/mempool.h"
      nm_copy_sd "src/basic/mempool.c"
      nm_copy_sd "src/basic/parse-util.c"
      nm_copy_sd "src/basic/parse-util.h"
      nm_copy_sd "src/basic/path-util.c"
      nm_copy_sd "src/basic/path-util.h"
      nm_copy_sd "src/basic/prioq.h"
      nm_copy_sd "src/basic/prioq.c"
      nm_copy_sd "src/basic/process-util.h"
      nm_copy_sd "src/basic/process-util.c"
      nm_copy_sd "src/basic/random-util.c"
      nm_copy_sd "src/basic/random-util.h"
      nm_copy_sd "src/basic/refcnt.h"
      nm_copy_sd "src/basic/set.h"
      nm_copy_sd "src/basic/signal-util.h"
      nm_copy_sd "src/basic/siphash24.h"
      nm_copy_sd "src/basic/socket-util.c"
      nm_copy_sd "src/basic/socket-util.h"
      nm_copy_sd "src/basic/sparse-endian.h"
      nm_copy_sd "src/basic/stat-util.c"
      nm_copy_sd "src/basic/stat-util.h"
      nm_copy_sd "src/basic/stdio-util.h"
      nm_copy_sd "src/basic/string-table.c"
      nm_copy_sd "src/basic/string-table.h"
      nm_copy_sd "src/basic/string-util.c"
      nm_copy_sd "src/basic/string-util.h"
      nm_copy_sd "src/basic/strv.c"
      nm_copy_sd "src/basic/strv.h"
      nm_copy_sd "src/basic/time-util.c"
      nm_copy_sd "src/basic/time-util.h"
      nm_copy_sd "src/basic/umask-util.h"
      nm_copy_sd_shared "src/basic/unaligned.h"
      nm_copy_sd "src/basic/utf8.c"
      nm_copy_sd "src/basic/utf8.h"
      nm_copy_sd "src/basic/util.c"
      nm_copy_sd "src/basic/util.h"
      nm_copy_sd "src/libsystemd-network/arp-util.c"
      nm_copy_sd "src/libsystemd-network/arp-util.h"
      nm_copy_sd "src/libsystemd-network/dhcp6-internal.h"
      nm_copy_sd "src/libsystemd-network/dhcp6-lease-internal.h"
      nm_copy_sd "src/libsystemd-network/dhcp6-network.c"
      nm_copy_sd "src/libsystemd-network/dhcp6-option.c"
      nm_copy_sd "src/libsystemd-network/dhcp6-protocol.h"
      nm_copy_sd "src/libsystemd-network/dhcp-identifier.c"
      nm_copy_sd "src/libsystemd-network/dhcp-identifier.h"
      nm_copy_sd "src/libsystemd-network/dhcp-internal.h"
      nm_copy_sd "src/libsystemd-network/dhcp-lease-internal.h"
      nm_copy_sd "src/libsystemd-network/dhcp-network.c"
      nm_copy_sd "src/libsystemd-network/dhcp-option.c"
      nm_copy_sd "src/libsystemd-network/dhcp-packet.c"
      nm_copy_sd "src/libsystemd-network/dhcp-protocol.h"
      nm_copy_sd "src/libsystemd-network/lldp-internal.h"
      nm_copy_sd "src/libsystemd-network/lldp-neighbor.c"
      nm_copy_sd "src/libsystemd-network/lldp-neighbor.h"
      nm_copy_sd "src/libsystemd-network/lldp-network.c"
      nm_copy_sd "src/libsystemd-network/lldp-network.h"
      nm_copy_sd "src/libsystemd-network/network-internal.c"
      nm_copy_sd "src/libsystemd-network/network-internal.h"
      nm_copy_sd "src/libsystemd-network/sd-dhcp6-client.c"
      nm_copy_sd "src/libsystemd-network/sd-dhcp6-lease.c"
      nm_copy_sd "src/libsystemd-network/sd-dhcp-client.c"
      nm_copy_sd "src/libsystemd-network/sd-dhcp-lease.c"
      nm_copy_sd "src/libsystemd-network/sd-ipv4acd.c"
      nm_copy_sd "src/libsystemd-network/sd-ipv4ll.c"
      nm_copy_sd "src/libsystemd-network/sd-lldp.c"
      nm_copy_sd "src/libsystemd/sd-event/event-source.h"
      nm_copy_sd "src/libsystemd/sd-event/event-util.c"
      nm_copy_sd "src/libsystemd/sd-event/event-util.h"
      nm_copy_sd "src/libsystemd/sd-event/sd-event.c"
      nm_copy_sd "src/libsystemd/sd-id128/id128-util.c"
      nm_copy_sd "src/libsystemd/sd-id128/id128-util.h"
      nm_copy_sd "src/libsystemd/sd-id128/sd-id128.c"
      nm_copy_sd "src/shared/dns-domain.c"
      nm_copy_sd "src/shared/dns-domain.h"
      nm_copy_sd "src/systemd/_sd-common.h"
      nm_copy_sd "src/systemd/sd-dhcp6-client.h"
      nm_copy_sd "src/systemd/sd-dhcp6-lease.h"
      nm_copy_sd "src/systemd/sd-dhcp-client.h"
      nm_copy_sd "src/systemd/sd-dhcp-lease.h"
      nm_copy_sd "src/systemd/sd-event.h"
      nm_copy_sd "src/systemd/sd-ndisc.h"
      nm_copy_sd "src/systemd/sd-id128.h"
      nm_copy_sd "src/systemd/sd-ipv4acd.h"
      nm_copy_sd "src/systemd/sd-ipv4ll.h"
      nm_copy_sd "src/systemd/sd-lldp.h"
      48d64de1
  6. 22 Nov, 2018 2 commits
  7. 20 Nov, 2018 1 commit
    • Thomas Haller's avatar
      keep-alive: check GetNameOwner lazy and only when we rely on the information · a7640618
      Thomas Haller authored
      Upside:
      
        - it may avoid a D-Bus call altogether.
      
        - currently there is no API to bind/unbind an existing NMActiveConnection,
          it can only be bound initially with AddAndActivate2.
          That makes sense when the calling applicatiion only wants to keep the
          profile active for as long as it lives. It never intends to extend the
          lifetime beyond that. In such a case, it is expected that eventually
          we need to be sure whether the D-Bus client is still alive, as we
          make a decision based on that. In that case, we eventually will call
          GetNameOwner and nothing is saved.
          A future feature could add D-Bus API to bind/unbind existing active
          connections after creation. That would allow an application to
          activate profiles and -- if anything goes wrong -- to be sure
          that the profile gets deactivted. Only in the success case, it
          would unbind the lifetime in a last step and terminate. Un such
          a case, binding to a D-Bus client is more of a fail-safe mechanism
          and commonly not expected to come into action.
          This is an interesting feature, because ActivateConnection D-Bus call
          may take a long time, while perfroming interactive polkit authentication.
          That means, `nmcli connection up $PROFILE` can fail with timeout before
          the active connection path is even created, but afterwards the profile may
          still succeed to activate. That seems wrong. nmcli could avoid that,
          by binding the active connection to itself, and when nmcli exits
          with failure, it would make sure that the active connection gets
          disconnected as well.
      
      Downside:
      
        - the code is slightly more complicated(?).
      
        - if the D-Bus name is indeed gone (but the NMKeepAlive is still alive
          for other reasons), we will not unregister the D-Bus signal, because we
          never learn that it's gone. It's not a leak, but an unnecessary
          signal subscription.
      
        - during nm_keep_alive_set_dbus_client_watch() we don't notice right
          away that the D-Bus client is already gone. That is unavoidable as
          we confirm the state asynchronously.
          If the NMKeepAlive is kept alive for other reasons but only later
          depends on presence of the D-Bus client, then in the non-lazy approach
          we would have noticed already that the client is gone, and would disconnect
          right away. With the lazy approach, this takes another async D-Bus call to
          notice.
      a7640618
  8. 19 Nov, 2018 3 commits
  9. 18 Nov, 2018 3 commits
    • Thomas Haller's avatar
      manager: prefer nm_streq over strcmp in impl_manager_add_and_activate_connection() · 28c386df
      Thomas Haller authored
      - use nm_streq() instead of g_strcmp0(). I think streq() is easier
        to understand.
      
      - the strings that are checked here must never be %NULL, because they come
        from string variants. Use nm_streq() instead of nm_streq0() or g_strcmp0().
      
      - don't add a "." to the GError messages. GError messages are commonly
        embedded in a larger message, and shoult not themself contain the dot.
      28c386df
    • Thomas Haller's avatar
      manager: fix checking for bind-lifetime setting in add-and-activate · bc23dc8f
      Thomas Haller authored
      Previously, @bind_lifetime was a string. While parsing the @options, we
      would set the string to the content of the parsed GVariant. Note that
      the GVariant is unrefed before we access @bind_lifetime, thus it's
      not guaranteed that it will still exist.
      
      Arguably, the string GVariant's lifetime is tied to the @options
      dictionary, so indeed it lives long enough. But that is not-obviously
      the case.
      
      Fix that by using a boolean instead. Also, rename @bind_lifetime to
      @bind_dbus_client.
      bc23dc8f
    • Thomas Haller's avatar
      manager: allow add-and-activate option "bind" with non-volatile profiles · 6f28f4b6
      Thomas Haller authored
      For one, there was a bug here: we cannot "goto error" without setting
      the @Error variable.
      
      Anyway, restricting "bind" "dbus-client" only to profiles that are
      "persist" mode "volatile" seems wrong. The "bind" option as it is,
      limits the lifetime of the active-connection. This has no direct relation
      with the lifetime of the setting-connection. Indeed, if the
      settings-connection's lifetime is itself set to "volatile", then
      it will indeed go away with the active-connection. However, these
      two concepts are not strictly related.
      
      In the future, we might add an option to limite the lifetime of
      a settings-connection to a D-Bus client ("bind-setting"). Possibly
      we should thus rename "bind" to "bind-activation", to make the
      distinction clearer.
      6f28f4b6
  10. 17 Nov, 2018 10 commits
    • Thomas Haller's avatar
      policy: don't check for valid error in active_connection_keep_alive_changed() · f10f0199
      Thomas Haller authored
      Most (not all) functions that can fail and report the reason with
      an GError are required to set the error if they fail. It's a bug
      to claim to fail without returning the GError reason.
      
      Hence, our callers usually don't check whether a GError is present but
      just access it.
      
      Likewise, for better or worse, our GError codes are often not meaningful
      (unless explicitly documented). Meaning, logging the error code number
      is not helpful. Instead, error messages should be written in a manner
      that one can find the source code location where it happened.
      
      Also, return-early to reduce the indentation level of the code.
      
      Also, drop the code comment. It seems to just describe what is obviously
      visible by reading the source. It doesn't explain much beside that the
      "doesn't have a reason", but not really why.
      f10f0199
    • Thomas Haller's avatar
      keep-alive: minor cleanup of nm_keep_alive_set_dbus_client_watch() · 6b79af28
      Thomas Haller authored
      - always issue a _notify_alive(), just to be sure. At least
        in case where we clear a dbus-client watch, the alive state
        could change.
      
      - avoid the logging in cleanup_dbus_watch(), if there is nothing
        to cleanup.
      6b79af28
    • Thomas Haller's avatar
      keep-alive: cleanup tracking visible state of connection · 3baf56b4
      Thomas Haller authored
      - in nm_keep_alive_set_settings_connection_watch_visible(), abort
        early when setting the same connection again (or %NULL again).
      
      - nm_keep_alive_set_settings_connection_watch_visible() would (already
        before) correctly disconnect the signal handler from the previous
        connection.
        As we anyway do explict disconnects, avoid the overhead of a weak
        pointer with g_signal_connect_object(). Just reuse the same
        setter to disconnect the signal in dispose().
      
      - fix leaking priv->connection in nm_keep_alive_set_settings_connection_watch_visible().
      
      - use g_signal_handlers_disconnect_by_func(), to be more specific about
        which signal we want to disconnect.
      3baf56b4
    • Thomas Haller's avatar
      keep-alive: cache the alive-state and only emit the signal when it changed · be91d1cc
      Thomas Haller authored
      The alive state is composed from various parts, let's only emit
      a _notify (self, PROP_ALIVE) when it actually changes.
      
      For that, cache the alive state and let _notify_alive() determine
      whether it changed and possibly emit the signal.
      be91d1cc
    • Thomas Haller's avatar
      keep-alive: various style fixes · 58923de4
      Thomas Haller authored
      Some trivial changes:
      
      - move nm_keep_alive_new() after nm_keep_alive_init(), so that the
        functions that initialize the instance are beside each other.
      - prefer nm_streq*() over strcmp().
      - wrap some lines.
      - remove some empty lines.
      58923de4
    • Thomas Haller's avatar
      keep-alive: drop unused error argument · 7842a580
      Thomas Haller authored
      7842a580
    • Benjamin Berg's avatar
      core: Add option to AddAndActivateConnection2 to bind the lifetime · eb883e34
      Benjamin Berg authored
      This allows binding the lifetime of the created connection to the
      existance of the requesting dbus client. This feature is useful if one
      has a service specific connection (e.g. P2P wireless) which will not be
      useful without the specific service.
      
      This is simply a mechanism to ensure proper connection cleanup if the
      requesting service has a failure.
      eb883e34
    • Benjamin Berg's avatar
      core: Add persist option to AddAndActivateConnection2 · 9cef6483
      Benjamin Berg authored
      This option allows setting the rules for how long the connection should
      be stored. Valid values are "disk" (the default), "memory" and
      "volatile". If "memory" or "volatile" is selected, the connection will
      not be saved to disk and with "volatile" it will be automatically
      removed when it is deactivated again.
      9cef6483
    • Benjamin Berg's avatar
      core: Add an AddAndActivateConnection2 routine with options parameter · 43c19d75
      Benjamin Berg authored
      This adds a new routine to be able to handle an arbitrary set of further
      options for AddAndActivateConnection. Note that no options are accepted
      for now.
      43c19d75
    • Benjamin Berg's avatar
      core: Introduce helper class to track connection keep alive · 37e8c53e
      Benjamin Berg authored
      For P2P connections it makes sense to bind the connection to the status
      of the operation that is being done. One example is that a wifi display
      (miracast) P2P connection should be shut down when streaming fails for
      some reason.
      
      This new helper class allows binding a connection to the presence of a
      DBus path meaning that it will be torn down if the process disappears.
      37e8c53e
  11. 15 Nov, 2018 1 commit
    • Thomas Haller's avatar
      device: ignore "carrier-wait" when device is already activated · aae6846d
      Thomas Haller authored
      nm_device_has_pending_action_reason() marks the device as busy, which in
      turn delays "startup-complete" and NetworkManager-wait-online.service.
      
      A device which has no carrier but is otherwise in activated state, is
      clearly ready. I didn't test this, but I presume that can easily be the
      case with static IP configuration (which can activate without the device
      having carrier).
      aae6846d