1. 12 Feb, 2019 3 commits
  2. 05 Feb, 2019 1 commit
  3. 27 Jan, 2019 1 commit
  4. 20 Dec, 2018 1 commit
  5. 13 Dec, 2018 2 commits
    • Thomas Haller's avatar
      core: use streq() instead of strcmp() for comparing ip-config methods · b16e09a7
      Thomas Haller authored
      Refactor some code to use nm_streq() and NM_IN_STRSET() instead of
      strcmp().
      
      Note that nm_utils_get_ip_config_method() never returns %NULL (not even
      with g_return*() assertion failures). nm_streq() is sufficent.
      b16e09a7
    • Thomas Haller's avatar
      core: use addr-family argument for nm_utils_get_ip_config_method() · 589063db
      Thomas Haller authored
      Recently, more and more code was refactored to use an addr_family
      integer to distinguish between IPv4 and IPv6.
      
      Refactor nm_utils_get_ip_config_method() and nm_device_get_effective_ip_config_method()
      to do that too. If we use different identifiers, we need to translate from one to
      another and its inconsistent. Also, accessing a GType is an unnecessary function call,
      instead of a plain constant.
      589063db
  6. 03 Dec, 2018 1 commit
  7. 22 Oct, 2018 1 commit
  8. 17 Oct, 2018 1 commit
    • Thomas Haller's avatar
      ppp: make ppp-manager cancellable via GCancellable · dd4968fa
      Thomas Haller authored
      Previously nm_ppp_manager_stop() would return a handle which
      makes it easy to cancel the operation.
      
      However, sometimes, we may want to cancel an operation based on
      an GCancellable. So, extend nm_ppp_manager_stop() to hook it
      with a cancellable.
      
      Essentially, move the code from nm-modem.c to nm-ppp-manager-call.c,
      where it belongs and where the functionality gets available to every
      component.
      dd4968fa
  9. 12 Sep, 2018 3 commits
    • Thomas Haller's avatar
      ppp: cleanup logging in impl_ppp_manager_set_ifindex() · d3ba511c
      Thomas Haller authored
      It's enough that all code paths in impl_ppp_manager_set_ifindex() log exactly
      one message. Also, give all messages the same prefix, so that it's clear where
      they come from.
      
      (cherry picked from commit 2a45c32e)
      d3ba511c
    • Thomas Haller's avatar
      ppp: downgrade warning about repeated SetIfindex calls from ppp plugin · d3e0a0f9
      Thomas Haller authored
      In src/ppp/nm-pppd-plugin.c, it seems that pppd can invoke
      phasechange(PHASE_RUNNING:) multiple times. Hence, the plugin
      calls SetIfindex multiple times too. In nm-ppp-manager.c, we
      want to make sure that the ifindex does not change after it
      was set once. However, calling SetIfindex with the same ifindex
      is not something worth warning. Just log a debug message and nothing.
      
      Maybe the plugin should remember that it already set the ifindex,
      and avoid multiple D-Bus calls. But it's unclear that that is desired.
      For now, just downgrade the warning.
      
      (cherry picked from commit 4a443983)
      d3e0a0f9
    • Thomas Haller's avatar
      ppp: avoid strncpy() in ppp plugin nm_phasechange() · 2f6af40c
      Thomas Haller authored
      strncpy() is deemed insecure, and it raises at least an eyebrow.
      While it's save in this case, just avoid it.
      
      (cherry picked from commit 4d11eba8)
      2f6af40c
  10. 11 Sep, 2018 7 commits
    • Thomas Haller's avatar
      ppp: cleanup logging in impl_ppp_manager_set_ifindex() · 2a45c32e
      Thomas Haller authored
      It's enough that all code paths in impl_ppp_manager_set_ifindex() log exactly
      one message. Also, give all messages the same prefix, so that it's clear where
      they come from.
      2a45c32e
    • Thomas Haller's avatar
      ppp: downgrade warning about repeated SetIfindex calls from ppp plugin · 4a443983
      Thomas Haller authored
      In src/ppp/nm-pppd-plugin.c, it seems that pppd can invoke
      phasechange(PHASE_RUNNING:) multiple times. Hence, the plugin
      calls SetIfindex multiple times too. In nm-ppp-manager.c, we
      want to make sure that the ifindex does not change after it
      was set once. However, calling SetIfindex with the same ifindex
      is not something worth warning. Just log a debug message and nothing.
      
      Maybe the plugin should remember that it already set the ifindex,
      and avoid multiple D-Bus calls. But it's unclear that that is desired.
      For now, just downgrade the warning.
      4a443983
    • Thomas Haller's avatar
      ppp: avoid strncpy() in ppp plugin nm_phasechange() · 4d11eba8
      Thomas Haller authored
      strncpy() is deemed insecure, and it raises at least an eyebrow.
      While it's save in this case, just avoid it.
      4d11eba8
    • Thomas Haller's avatar
      ppp-manager: avoid crash with nonexisting link in impl_ppp_manager_set_ifindex() · 7c50748d
      Thomas Haller authored
      Fixes: dd98ada3
      (cherry picked from commit 30a469e0)
      7c50748d
    • Frederic Danis's avatar
      ppp-manager: fix pppd not exiting correctly on modem hangup · b3ca8abe
      Frederic Danis authored
      When unplugging an USB 3G modem device, pppd does not exit correctly and
      we have the following traces:
      
      Sep 10 07:58:24.616465 ModemManager[1158]: <info>  (tty/ttyUSB0): released by device '/sys/devices/pci0000:00/0000:00:1c.0/0000:01:00.0/usb4/4-1'
      Sep 10 07:58:24.620314 pppd[2292]: Modem hangup
      Sep 10 07:58:24.621368 ModemManager[1158]: <info>  (tty/ttyUSB1): released by device '/sys/devices/pci0000:00/0000:00:1c.0/0000:01:00.0/usb4/4-1'
      Sep 10 07:58:24.621835 ModemManager[1158]: <warn>  (ttyUSB1): could not re-acquire serial port lock: (5) Input/output error
      Sep 10 07:58:24.621358 NetworkManager[1871]: <debug> ppp-manager: set-ifindex 4
      Sep 10 07:58:24.621369 NetworkManager[1871]: <warn>  ppp-manager: can't change the ifindex from 4 to 4
      Sep 10 07:58:24.623982 NetworkManager[1871]: <info>  device (ttyUSB0): state change: activated -> unmanaged (reason 'removed', sys-iface-state: 'removed')
      Sep 10 07:58:24.624411 NetworkManager[1871]: <debug> kill child process 'pppd' (2292): wait for process to terminate after sending SIGTERM (15) (send SIGKILL in 1500 milliseconds)...
      Sep 10 07:58:24.624440 NetworkManager[1871]: <debug> modem-broadband[ttyUSB0]: notifying ModemManager about the modem disconnection
      Sep 10 07:58:24.626591 NetworkManager[1871]: <debug> modem-broadband[ttyUSB0]: notifying ModemManager about the modem disconnection
      Sep 10 07:58:24.681016 NetworkManager[1871]: <warn>  modem-broadband[ttyUSB0]: failed to disconnect modem: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface 'org.freedesktop.ModemManager1.Modem.Simple' on object at path /org/freedesktop/ModemManager1/Modem/0
      Sep 10 07:58:26.126817 NetworkManager[1871]: <debug> kill child process 'pppd' (2292): process not terminated after 1502368 usec. Sending SIGKILL signal
      Sep 10 07:58:26.128121 NetworkManager[1871]: <info>  device (ppp0): state change: disconnected -> unmanaged (reason 'unmanaged', sys-iface-state: 'removed')
      Sep 10 07:58:26.135571 NetworkManager[1871]: <debug> kill child process 'pppd' (2292): terminated by signal 9 (1511158 usec elapsed)
      
      This is due to nm-ppp-plugin waiting on SetIfIndex call until timeout,
      which is longer than termination process timeout.
      
      Calling g_dbus_method_invocation_return_value() on error fixes this.
      
      Fixes: dd98ada3
      
      https://mail.gnome.org/archives/networkmanager-list/2018-September/msg00010.html
      (cherry picked from commit e66e4d0e)
      b3ca8abe
    • Thomas Haller's avatar
    • Frederic Danis's avatar
      ppp-manager: fix pppd not exiting correctly on modem hangup · e66e4d0e
      Frederic Danis authored
      When unplugging an USB 3G modem device, pppd does not exit correctly and
      we have the following traces:
      
      Sep 10 07:58:24.616465 ModemManager[1158]: <info>  (tty/ttyUSB0): released by device '/sys/devices/pci0000:00/0000:00:1c.0/0000:01:00.0/usb4/4-1'
      Sep 10 07:58:24.620314 pppd[2292]: Modem hangup
      Sep 10 07:58:24.621368 ModemManager[1158]: <info>  (tty/ttyUSB1): released by device '/sys/devices/pci0000:00/0000:00:1c.0/0000:01:00.0/usb4/4-1'
      Sep 10 07:58:24.621835 ModemManager[1158]: <warn>  (ttyUSB1): could not re-acquire serial port lock: (5) Input/output error
      Sep 10 07:58:24.621358 NetworkManager[1871]: <debug> ppp-manager: set-ifindex 4
      Sep 10 07:58:24.621369 NetworkManager[1871]: <warn>  ppp-manager: can't change the ifindex from 4 to 4
      Sep 10 07:58:24.623982 NetworkManager[1871]: <info>  device (ttyUSB0): state change: activated -> unmanaged (reason 'removed', sys-iface-state: 'removed')
      Sep 10 07:58:24.624411 NetworkManager[1871]: <debug> kill child process 'pppd' (2292): wait for process to terminate after sending SIGTERM (15) (send SIGKILL in 1500 milliseconds)...
      Sep 10 07:58:24.624440 NetworkManager[1871]: <debug> modem-broadband[ttyUSB0]: notifying ModemManager about the modem disconnection
      Sep 10 07:58:24.626591 NetworkManager[1871]: <debug> modem-broadband[ttyUSB0]: notifying ModemManager about the modem disconnection
      Sep 10 07:58:24.681016 NetworkManager[1871]: <warn>  modem-broadband[ttyUSB0]: failed to disconnect modem: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface 'org.freedesktop.ModemManager1.Modem.Simple' on object at path /org/freedesktop/ModemManager1/Modem/0
      Sep 10 07:58:26.126817 NetworkManager[1871]: <debug> kill child process 'pppd' (2292): process not terminated after 1502368 usec. Sending SIGKILL signal
      Sep 10 07:58:26.128121 NetworkManager[1871]: <info>  device (ppp0): state change: disconnected -> unmanaged (reason 'unmanaged', sys-iface-state: 'removed')
      Sep 10 07:58:26.135571 NetworkManager[1871]: <debug> kill child process 'pppd' (2292): terminated by signal 9 (1511158 usec elapsed)
      
      This is due to nm-ppp-plugin waiting on SetIfIndex call until timeout,
      which is longer than termination process timeout.
      
      Calling g_dbus_method_invocation_return_value() on error fixes this.
      
      Fixes: dd98ada3
      
      https://mail.gnome.org/archives/networkmanager-list/2018-September/msg00010.html
      e66e4d0e
  11. 17 Jul, 2018 1 commit
    • Thomas Haller's avatar
      build: create "config-extra.h" header instead of passing directory variables via CFLAGS · a75ab799
      Thomas Haller authored
      1) the command line gets shorter. I frequently run `make V=1` to see
         the command line arguments for the compiler, and there is a lot
         of noise.
      
      2) define each of these variables at one place. This makes it easy
         to verify that for all compilation units, a particular
         define has the same value. Previously that was not obvious or
         even not the case (see commit e5d1a713
         and commit d63cf1ef).
         The point is to avoid redundancy.
      
      3) not all compilation units need all defines. In fact, most modules
         would only need a few of these defines. We aimed to pass the necessary
         minium of defines to each compilation unit, but that was non-obvious
         to get right and often we set a define that wasn't used. See for example
         "src_settings_plugins_ibft_cppflags" which needlessly had "-DSYSCONFDIR".
         This question is now entirely avoided by just defining all variables in
         a header. We don't care to find the minimum, because every component
         gets anyway all defines from the header.
      
      4) this also avoids the situation, where a module that previously did
         not use a particular define gets modified to require it. Previously,
         that would have required to identify the missing define, and add
         it to the CFLAGS of the complation unit. Since every compilation
         now includes "config-extra.h", all defines are available everywhere.
      
      5) the fact that each define is now available in all compilation units
         could be perceived as a downside. But it isn't, because these defines
         should have a unique name and one specific value. Defining the same
         name with different values, or refer to the same value by different
         names is a bug, not a desirable feature. Since these defines should
         be unique accross the entire tree, there is no problem in providing
         them to every compilation unit.
      
      6) the reason why we generate "config-extra.h" this way, instead of using
         AC_DEFINE() in configure.ac, is due to the particular handling of
         autoconf for directory variables. See [1].
         With meson, it would be trivial to put them into "config.h.meson".
         While that is not easy with autoconf, the "config-extra.h" workaround
         seems still preferable to me.
      
      [1] https://www.gnu.org/software/autoconf/manual/autoconf-2.63/html_node/Installation-Directory-Variables.html
      a75ab799
  12. 11 Jul, 2018 1 commit
    • Thomas Haller's avatar
      all: don't use gchar/gshort/gint/glong but C types · e1c7a2b5
      Thomas Haller authored
      We commonly don't use the glib typedefs for char/short/int/long,
      but their C types directly.
      
          $ git grep '\<g\(char\|short\|int\|long\|float\|double\)\>' | wc -l
          587
          $ git grep '\<\(char\|short\|int\|long\|float\|double\)\>' | wc -l
          21114
      
      One could argue that using the glib typedefs is preferable in
      public API (of our glib based libnm library) or where it clearly
      is related to glib, like during
      
        g_object_set (obj, PROPERTY, (gint) value, NULL);
      
      However, that argument does not seem strong, because in practice we don't
      follow that argument today, and seldomly use the glib typedefs.
      Also, the style guide for this would be hard to formalize, because
      "using them where clearly related to a glib" is a very loose suggestion.
      
      Also note that glib typedefs will always just be typedefs of the
      underlying C types. There is no danger of glib changing the meaning
      of these typedefs (because that would be a major API break of glib).
      
      A simple style guide is instead: don't use these typedefs.
      
      No manual actions, I only ran the bash script:
      
        FILES=($(git ls-files '*.[hc]'))
        sed -i \
            -e 's/\<g\(char\|short\|int\|long\|float\|double\)\>\( [^ ]\)/\1\2/g' \
            -e 's/\<g\(char\|short\|int\|long\|float\|double\)\>  /\1   /g' \
            -e 's/\<g\(char\|short\|int\|long\|float\|double\)\>/\1/g' \
            "${FILES[@]}"
      e1c7a2b5
  13. 09 Jul, 2018 2 commits
  14. 25 May, 2018 4 commits
    • Thomas Haller's avatar
      core: add and use NM_SHUTDOWN_TIMEOUT_MS as duration that we plan for shutdown · eaf36db6
      Thomas Haller authored
      nm_ppp_manager_stop() wants to ensure that the pppd process is really
      gone. For that it uses nm_utils_kill_child_async() to first send
      SIGTERM, and sending SIGKILL after a timeout.
      
      Later, we want to fix shutdown of NetworkManager to iterate the mainloop
      during shutdown, so that such operations are still handled. However, we
      can only delay shutdown for a certain time. After a timeout (NM_SHUTDOWN_TIMEOUT_MS
      plus NM_SHUTDOWN_TIMEOUT_MS_GRACE) we really have to give up and
      terminate.
      
      That means, the right amount of time between sending SIGTERM and SIGKILL
      is exactly NM_SHUTDOWN_TIMEOUT_MS. Hopefully that is of course
      sufficient in the first place. If not, send SIGKILL afterwards, and give
      a bit more time (NM_SHUTDOWN_TIMEOUT_MS_GRACE) to reap the child.
      And if all this time is still not enough, something is really odd and we
      abort waiting, with a warning in the logfile.
      
      Since we don't properly handle shutdown yet, the description above is
      not really true. But with this patch, we fix it from point of view of
      NMPPPManager.
      eaf36db6
    • Thomas Haller's avatar
      ppp-manager: rework stopping NMPPPManager by merging async/sync methods · 43f67b42
      Thomas Haller authored
      Previously, there were two functions nm_ppp_manager_stop_sync() and
      nm_ppp_manager_stop_async().
      
      However, stop-sync() would still kill the process asynchronously (with a
      2 seconds timeout before sending SIGKILL).
      
      On the other hand, stop-async() did pretty much the same thing as
      sync-code, except also using the GAsyncResult.
      
      Merge the two functions. Stopping the instance for the most part can be
      done entirely synchrnous. The only thing that is asynchronous, is
      to wait for the process to terminate. For that, add a new callback
      argument to nm_ppp_manager_stop(). This replaces the GAsyncResult
      pattern.
      
      Also, always ensure that NetworkManager runs the mainloop at least as
      long until the process really terminated. Currently we don't get that
      right, and during shutdown we just stop iterating the mainloop. However,
      fix this from point of view of NMPPPManager and register a wait-object,
      that later will correctly delay shutdown.
      
      Also, NMDeviceWwan cared to wait (asynchronously) until pppd really
      terminated. Keep that functionality. nm_ppp_manager_stop() returns
      a handle that can be used to cancel the asynchrounous request and invoke
      the callback right away. However note, that even when cancelling the
      request, the wait-object that prevents shutdown of NetworkManager is
      kept around, so that we can be sure to properly clean up.
      43f67b42
    • Thomas Haller's avatar
      ppp-manager/trivial: rename variables holding self pointers · 53d04a1d
      Thomas Haller authored
      We usually structure our code in a (pseudo) object oriented way.
      It makes sense to call the variable for the target object "self",
      it is more familiar and usually done.
      53d04a1d
    • Thomas Haller's avatar
      ppp-manager: refactor killing pppd process by using _ppp_kill() function · 51566351
      Thomas Haller authored
      - add callback arguments to _ppp_kill(). Although most callers don't
        care, it makes it more obvious that this kills the process
        asynchronously.
      
      - the call to nm_utils_kill_child_async() is complicated, with many
        arguments. Only call it from one place, and re-use the simpler wrapper
        function _ppp_kill() everywhere.
      51566351
  15. 09 May, 2018 1 commit
  16. 13 Mar, 2018 1 commit
    • Thomas Haller's avatar
      core/dbus: rework creating numbered D-Bus export path by putting counter into class · 57ab9fd6
      Thomas Haller authored
      I dislike the static hash table to cache the integer counter for
      numbered paths. Let's instead cache the counter at the class instance
      itself -- since the class contains the information how the export
      path should be exported.
      
      However, we cannot use a plain integer field inside the class structure,
      because the class is copied between derived classes. For example,
      NMDeviceEthernet and NMDeviceBridge both get a copy of the NMDeviceClass
      instance. Hence, the class doesn't contain the counter directly, but
      a pointer to one counter that can be shared between sibling classes.
      57ab9fd6
  17. 12 Mar, 2018 1 commit
    • Thomas Haller's avatar
      core/dbus: rework D-Bus implementation to use lower layer GDBusConnection API · 297d4985
      Thomas Haller authored
      Previously, we used the generated GDBusInterfaceSkeleton types and glued
      them via the NMExportedObject base class to our NM types. We also used
      GDBusObjectManagerServer.
      
      Don't do that anymore. The resulting code was more complicated despite (or
      because?) using generated classes. It was hard to understand, complex, had
      ordering-issues, and had a runtime and memory overhead.
      
      This patch refactors this entirely and uses the lower layer API GDBusConnection
      directly. It replaces the generated code, GDBusInterfaceSkeleton, and
      GDBusObjectManagerServer. All this is now done by NMDbusObject and NMDBusManager
      and static descriptor instances of type GDBusInterfaceInfo.
      
      This adds a net plus of more then 1300 lines of hand written code. I claim
      that this implementation is easier to understand. Note that previously we
      also required extensive and complex glue code to bind our objects to the
      generated skeleton objects. Instead, now glue our objects directly to
      GDBusConnection. The result is more immediate and gets rid of layers of
      code in between.
      Now that the D-Bus glue us more under our control, we can address issus and
      bottlenecks better, instead of adding code to bend the generated skeletons
      to our needs.
      
      Note that the current implementation now only supports one D-Bus connection.
      That was effectively the case already, although there were places (and still are)
      where the code pretends it could also support connections from a private socket.
      We dropped private socket support mainly because it was unused, untested and
      buggy, but also because GDBusObjectManagerServer could not export the same
      objects on multiple connections. Now, it would be rather straight forward to
      fix that and re-introduce ObjectManager on each private connection. But this
      commit doesn't do that yet, and the new code intentionally supports only one
      D-Bus connection.
      Also, the D-Bus startup was simplified. There is no retry, either nm_dbus_manager_start()
      succeeds, or it detects the initrd case. In the initrd case, bus manager never tries to
      connect to D-Bus. Since the initrd scenario is not yet used/tested, this is good enough
      for the moment. It could be easily extended later, for example with polling whether the
      system bus appears (like was done previously). Also, restart of D-Bus daemon isn't
      supported either -- just like before.
      
      Note how NMDBusManager now implements the ObjectManager D-Bus interface
      directly.
      
      Also, this fixes race issues in the server, by no longer delaying
      PropertiesChanged signals. NMExportedObject would collect changed
      properties and send the signal out in idle_emit_properties_changed()
      on idle. This messes up the ordering of change events w.r.t. other
      signals and events on the bus. Note that not only NMExportedObject
      messed up the ordering. Also the generated code would hook into
      notify() and process change events in and idle handle, exhibiting the
      same ordering issue too.
      No longer do that. PropertiesChanged signals will be sent right away
      by hooking into dispatch_properties_changed(). This means, changing
      a property in quick succession will no longer be combined and is
      guaranteed to emit signals for each individual state. Quite possibly
      we emit now more PropertiesChanged signals then before.
      However, we are now able to group a set of changes by using standard
      g_object_freeze_notify()/g_object_thaw_notify(). We probably should
      make more use of that.
      
      Also, now that our signals are all handled in the right order, we
      might find places where we still emit them in the wrong order. But that
      is then due to the order in which our GObjects emit signals, not due
      to an ill behavior of the D-Bus glue. Possibly we need to identify
      such ordering issues and fix them.
      
      Numbers (for contrib/rpm --without debug on x86_64):
      
      - the patch changes the code size of NetworkManager by
        - 2809360 bytes
        + 2537528 bytes (-9.7%)
      
      - Runtime measurements are harder because there is a large variance
        during testing. In other words, the numbers are not reproducible.
        Currently, the implementation performs no caching of GVariants at all,
        but it would be rather simple to add it, if that turns out to be
        useful.
        Anyway, without strong claim, it seems that the new form tends to
        perform slightly better. That would be no surprise.
      
        $ time (for i in {1..1000}; do nmcli >/dev/null || break; echo -n .;  done)
        - real    1m39.355s
        + real    1m37.432s
      
        $ time (for i in {1..2000}; do busctl call org.freedesktop.NetworkManager /org/freedesktop org.freedesktop.DBus.ObjectManager GetManagedObjects > /dev/null || break; echo -n .; done)
        - real    0m26.843s
        + real    0m25.281s
      
      - Regarding RSS size, just looking at the processes in similar
        conditions, doesn't give a large difference. On my system they
        consume about 19MB RSS. It seems that the new version has a
        slightly smaller RSS size.
        - 19356 RSS
        + 18660 RSS
      297d4985
  18. 28 Feb, 2018 1 commit
  19. 12 Feb, 2018 1 commit
    • Lubomir Rintel's avatar
      ppp/plugin: use g_strlcpy() · 85c0dc4a
      Lubomir Rintel authored
      It's nicer but also doesn't annoy gcc 8: "error: ‘strncpy’ specified bound
      depends on the length of the source argument [-Werror=stringop-overflow=]"
      85c0dc4a
  20. 18 Jan, 2018 1 commit
  21. 11 Jan, 2018 1 commit
  22. 10 Jan, 2018 4 commits
    • Beniamino Galvani's avatar
      ppp: update interface name in the plugin after NM changes it · 398f9105
      Beniamino Galvani authored
      When NM knows of the ifindex/name of the new PPP interface (through
      the SetIfindex() call), it renames it. This can race with the pppd
      daemon, which issues ioctl() using the interface name cached in the
      global 'ifname' variable:
      
        ...
        NetworkManager[27213]: <debug> [1515427406.0036] ppp-manager: set-ifindex 71
        pppd[27801]: sent [CCP ConfRej id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
        NetworkManager[27213]: <debug> [1515427406.0036] platform: link: setting 'ppp5' (71) name dsl-ppp
        pppd[27801]: sent [IPCP ConfAck id=0x2 <addr 3.1.1.1>]
        pppd[27801]: ioctl(SIOCSIFADDR): No such device (line 2473)
        pppd[27801]: Interface configuration failed
        pppd[27801]: Couldn't get PPP statistics: No such device
        ...
      
      Fortunately the variable is exposed to plugins and so we can turn the
      SetIfindex() D-Bus call into a synchronous one and then update the
      value of the 'ifname' global variable with the new interface name
      assigned by NM.
      398f9105
    • Beniamino Galvani's avatar
      ppp: introduce SetIfindex pppd plugin D-Bus method · dd98ada3
      Beniamino Galvani authored
      If IPV6CP terminates before IPCP, pppd enters the RUNNING phase and we
      start IP configuration without having an IP interface set, which
      triggers assertions.
      
      Instead, add a SetIfindex() D-Bus method that gets called by the
      plugin when pppd becomes RUNNING. The method sets the IP ifindex of
      the device and starts IP configuration.
      
      https://bugzilla.redhat.com/show_bug.cgi?id=1515829
      dd98ada3
    • Thomas Haller's avatar
      build/meson: unconditionally use linker version scripts · 349861ce
      Thomas Haller authored
      We also unconditionally use them with autotools.
      Also, the detection for have_version_script does
      not seem correct to me. At least, it didn't work
      with clang.
      349861ce
    • Inigo Martínez's avatar
      meson: Use string variables extensively · 50930ed1
      Inigo Martínez authored
      The strings holding the names used for libraries have also been
      moved to different variables. This way they would be less error
      as these variables can be reused easily and any typing error
      would be quickly detected.
      50930ed1