summaryrefslogtreecommitdiff
path: root/src/devices/wwan/nm-modem.c
Commit message (Collapse)AuthorAgeFilesLines
* all: move "src/" directory to "src/core/"Thomas Haller2021-02-041-2037/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | Currently "src/" mostly contains the source code of the daemon. I say mostly, because that is not true, there are also the device, settings, wwan, ppp plugins, the initrd generator, the pppd and dhcp helper, and probably more. Also we have source code under libnm-core/, libnm/, clients/, and shared/ directories. That is all confusing. We should have one "src" directory, that contains subdirectories. Those subdirectories should contain individual parts (libraries or applications), that possibly have dependencies on other subdirectories. There should be a flat hierarchy of directories under src/, which contains individual modules. As the name "src/" is already taken, that prevents any sensible restructuring of the code. As a first step, move "src/" to "src/core/". This gives space to reorganize the code better by moving individual components into "src/". For inspiration, look at systemd's "src/" directory. https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/743
* all: update deprecated SPDX license identifiersThomas Haller2021-01-051-1/+1
| | | | | | | | | | | | | | | | These SPDX license identifiers are deprecated ([1]). Update them. [1] https://spdx.org/licenses/ sed \ -e '1 s%^/\* SPDX-License-Identifier: \(GPL-2.0\|LGPL-2.1\)+ \*/$%/* SPDX-License-Identifier: \1-or-later */%' \ -e '1,2 s%^\(--\|#\|//\) SPDX-License-Identifier: \(GPL-2.0\|LGPL-2.1\)+$%\1 SPDX-License-Identifier: \2-or-later%' \ -i \ $(git grep -l SPDX-License-Identifier -- \ ':(exclude)shared/c-*/' \ ':(exclude)shared/n-*/' \ ':(exclude)shared/systemd/src' \ ':(exclude)src/systemd/src')
* all: unify comment style for SPDX-License-Identifier tagThomas Haller2020-09-291-1/+1
| | | | | | | | | | Our coding style recommends C style comments (/* */) instead of C++ (//). Also, systemd (which we partly fork) uses C style comments for the SPDX-License-Identifier. Unify the style. $ sed -i '1 s#// SPDX-License-Identifier: \([^ ]\+\)$#/* SPDX-License-Identifier: \1 */#' -- $(git ls-files -- '*.[hc]' '*.[hc]pp')
* format: replace tabs for indentation in code commentsac/clang-formatThomas Haller2020-09-281-55/+55
| | | | | | | | | | | | sed -i \ -e 's/^'$'\t'' \*/ */g' \ -e 's/^'$'\t\t'' \*/ */g' \ -e 's/^'$'\t\t\t'' \*/ */g' \ -e 's/^'$'\t\t\t\t'' \*/ */g' \ -e 's/^'$'\t\t\t\t\t'' \*/ */g' \ -e 's/^'$'\t\t\t\t\t\t'' \*/ */g' \ -e 's/^'$'\t\t\t\t\t\t\t'' \*/ */g' \ $(git ls-files -- '*.[hc]')
* all: reformat all with new clang-format styleAntonio Cardace2020-09-281-1451/+1491
| | | | | | | | | | | | Run: ./contrib/scripts/nm-code-format.sh -i ./contrib/scripts/nm-code-format.sh -i Yes, it needs to run twice because the first run doesn't yet produce the final result. Signed-off-by: Antonio Cardace <acardace@redhat.com>
* nm-modem: don't fail if secrets request times outArnaud Ferraris2020-03-271-1/+2
| | | | | | | | | | | | | | | When starting with a locked modem, it may take some time for the user to enter the PIN code, leading to the secrets request timing out. In that case, we want the connection activation to be retried automatically once the modem is unlocked, which can't be achieved if we propagate the error, as the device will change state to 'failed'. This patch ignores the 'no-secrets' error, as it means either the request has timed out, or the user cancelled the request without notifying NetworkManager. By doing this, we allow the connection to be re-activated once the modem is unlocked. Signed-off-by: Arnaud Ferraris <arnaud.ferraris@collabora.com>
* all: use nm_clear_g_free() instead of g_clear_pointer()Thomas Haller2020-03-231-1/+1
| | | | | | | | | I think it's preferable to use nm_clear_g_free() instead of g_clear_pointer(, g_free). The reasons are not very strong, but I think it is overall preferable to have a shorthand for this frequently used functionality. sed 's/\<g_clear_pointer *(\([^;]*\), *\(g_free\) *)/nm_clear_g_free (\1)/g' $(git grep -l g_clear_pointer) -i
* all: drop explicit casts from _GET_PRIVATE() macro callsThomas Haller2020-02-141-3/+3
| | | | | | | | | The _GET_PRIVATE() macros are all implemented based on _NM_GET_PRIVATE(). That macro tries to be more type safe and uses _Generic() to do the right thing. Explicitly casting is not only unnecessary, it defeats these (static) type checks. Don't do that.
* device: fix setting MTU from connection when limited by parentBeniamino Galvani2019-10-101-1/+3
| | | | | | | | | | | | | | | | | We try to set only one time the MTU from the connection to not interfere with manual user changes. If at some point the parent interface changes temporarily MTU to a lower value (for example, because the connection was reactivated), the kernel will also lower the MTU on child interface and we will not update it ever again. Add a workaround to this. If we detect that the MTU we want to set from connection is higher that the allowed one, go into a state where we follow the parent MTU until it is possible to set again the desired MTU. This is a bit ugly, but I can't think of any nicer way to do it. https://bugzilla.redhat.com/show_bug.cgi?id=1751079
* all: manually drop code comments with file descriptionThomas Haller2019-10-011-2/+1
|
* bluetooth: refactor BlueZ handling and let NMBluezManager cache ↵Thomas Haller2019-09-231-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ObjectManager data This is a complete refactoring of the bluetooth code. Now that BlueZ 4 support was dropped, the separation of NMBluezManager and NMBluez5Manager makes no sense. They should be merged. At that point, notice that BlueZ 5's D-Bus API is fully centered around D-Bus's ObjectManager interface. Using that interface, we basically only call GetManagedObjects() once and register to InterfacesAdded, InterfacesRemoved and PropertiesChanged signals. There is no need to fetch individual properties ever. Note how NMBluezDevice used to query the D-Bus properties itself by creating a GDBusProxy. This is redundant, because when using the ObjectManager interfaces, we have all information already. Instead, let NMBluezManager basically become the client-side cache of all of BlueZ's ObjectManager interface. NMBluezDevice was mostly concerned about caching the D-Bus interface's state, tracking suitable profiles (pan_connection), and moderate between bluez and NMDeviceBt. These tasks don't get simpler by moving them to a seprate file. Let them also be handled by NMBluezManager. I mean, just look how it was previously: NMBluez5Manager registers to ObjectManager interface and sees a device appearing. It creates a NMBluezDevice object and registers to its "initialized" and "notify:usable" signal. In the meantime, NMBluezDevice fetches the relevant information from D-Bus (although it was already present in the data provided by the ObjectManager) and eventually emits these usable and initialized signals. Then, NMBlue5Manager emits a "bdaddr-added" signal, for which NMBluezManager creates the NMDeviceBt instance. NMBluezManager, NMBluez5Manager and NMBluezDevice are strongly cooperating to the point that it is simpler to merge them. This is not mere refactoring. This patch aims to make everything asynchronously and always cancellable. Also, it aims to fix races and inconsistencies of the state. - Registering to a NAP server now waits for the response and delays activation of the NMDeviceBridge accordingly. - For NAP connections we now watch the bnep0 interface in platform, and tear down the device when it goes away. Bluez doesn't send us a notification on D-Bus in that case. - Rework establishing a DUN connection. It no longer uses blocking connect() and does not block until rfcomm device appears. It's all async now. It also watches the rfcomm file descriptor for POLLERR/POLLHUP to notice disconnect. - drop nm_device_factory_emit_component_added() and instead let NMDeviceBt directly register to the WWan factory's "added" signal.
* wwan: simplify API of nm_modem_act_stage2_config() to never failThomas Haller2019-09-221-6/+2
| | | | | | | | | | | | | | The previous function arguments of nm_modem_act_stage2_config() act as if the function could fail or even postpone the action. It never did. We cannot treat this generic. A caller needs to know whether nm_modem_act_stage2_config() can postpone the action, and when it does, which signal is emitted upon completion. That is, the caller needs to know how to proceed after postponing. In other words, since this function currently cannot fail or postpone the stage, so must all callers already rely on that. At this point it makes no sense to pretend that the function could be any different, if all callers assume it is not. Simplify the API.
* wwan: mark modems that are taken by a NMDevice as "claimed"Thomas Haller2019-09-221-0/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | NMModem-s are either used by NMDeviceModem or by NMDeviceBt. The mechanism how that is coordinated it odd: - the factory emits component-added, and then NMDeviceBt might take the device (and claim it). In that case, component-added would return TRUE to indicate that the modem should not be also used by NMDeviceModem. - next, if the modem has a driver that looks like bluetooth, NMDeviceModem ignores it too. - finally, NMDeviceModem claims the modem (which is now considered to be non-bluetooth). I think the first problem is that the device factory tries to have this generic mechanism of "component-added". It's literally only used to cover this special case. Note that NMDeviceBt is aware of modems. So, abstracting this just adds lots of code that could be solved better by handling the case (of giving the modem to either NMDeviceBt or NMDeviceModem) specifically. NMWWanFactory itself registers to the NM_MODEM_MANAGER_MODEM_ADDED signal and emits nm_device_factory_emit_component_added(). We could just have NMWWanFactory and NMDeviceBt both register to that signal. Signals even support priorities, so we could have NMDeviceBt be called first to claim the device. Anyway, as the modem can only have one owner, the modem should have a flag that indicates whether it's claimed or not. That will allow multiple components all look at the same modem and moderate who is going to take ownership.
* all: SPDX header conversionLubomir Rintel2019-09-101-14/+1
| | | | | $ find * -type f |xargs perl contrib/scripts/spdx.pl $ git rm contrib/scripts/spdx.pl
* modem/trivial: rename virtual function NMModemClass.act_stage1_prepare()Thomas Haller2019-08-281-5/+5
| | | | | NMDeviceClass already has a function with this name. It's confusing to have multiple virtual functions named the same. Rename.
* device: support reapplying route-tableThomas Haller2019-06-171-2/+2
| | | | | | | | | | | | | | | | | Changing "ipv4.route-table" and "ipv6.route-table" was not allowed during reapply. The main difficulty for supporting that is changing the sync-mode. With route-table 0, we don't sync all tables but only the main table. So, when reapply changes from full-sync to no-full-sync, it's slightly more complicated. But it's probably not too complicated either. The change from no-full-sync to full-sync is simple: we just start doing a full-sync. The reverse change is slightly more complicated, because we need to do one last full-sync, to get rid of routes that we configured on those other tables.
* ipv6: add 'disabled' methodBeniamino Galvani2019-06-111-3/+5
| | | | | | | Add a new ipv6.method value 'disabled' that completely disables IPv6 for the interface. https://bugzilla.redhat.com/show_bug.cgi?id=1643841
* all: drop emacs file variables from source filesThomas Haller2019-06-111-1/+0
| | | | | | | | | | | | | | | | | | | | | | We no longer add these. If you use Emacs, configure it yourself. Also, due to our "smart-tab" usage the editor anyway does a subpar job handling our tabs. However, on the upside every user can choose whatever tab-width he/she prefers. If "smart-tabs" are used properly (like we do), every tab-width will work. No manual changes, just ran commands: F=($(git grep -l -e '-\*-')) sed '1 { /\/\* *-\*- *[mM]ode.*\*\/$/d }' -i "${F[@]}" sed '1,4 { /^\(#\|--\|dnl\) *-\*- [mM]ode/d }' -i "${F[@]}" Check remaining lines with: git grep -e '-\*-' The ultimate purpose of this is to cleanup our files and eventually use SPDX license identifiers. For that, first get rid of the boilerplate lines.
* wwan: don't call _nm_modem_set_operator_code() in property setterThomas Haller2019-06-091-1/+2
| | | | | | | | | | | | | | | | | NM_MODEM_OPERATOR_CODE property is construct-only. Add our common code comment to the property setter. Construct-only setters are pretty simple. They run before the object is constructed, hence their scope is clearer. As such, there is no need to emit property changed notifications (also because that is already taken care by the GObject property setter). Don't call _nm_modem_set_operator_code(), just directly set the property. Usually we aim to have only one place where we set state (_nm_modem_set_operator_code()). But a construct-only property setter is trivial enough that we can affort having two places to modify the property. In particular, because the property setter does not "modify" the property, it merely initializes it before the object is fully constructed.
* wwan: remove unused property setter for NM_MODEM_APNThomas Haller2019-06-091-3/+0
| | | | The property is read-only. The setter code is unused and unnecessary.
* wwan: expose the APN on the D-BusLubomir Rintel2019-06-051-0/+34
| | | | | This is going to be useful for UIs to know which plan we're actually using.
* wwan: expose the network id on the D-BusLubomir Rintel2019-06-051-0/+32
| | | | | This is going to be useful for UIs to find out which network is the device actually registered with.
* modem: use set conn.interface upon completing the CDMA connectionsLubomir Rintel2019-05-281-1/+2
| | | | | There doesn't seem to be a better way to pinpoint a CDMA connection to a device. This will have to do for now.
* device: limit maximum MTU for connection default of "infiniband.mtu"Thomas Haller2019-04-051-1/+1
| | | | | | Connection defaults should correspond in range to the per-profile values. "infiniband.mtu" is required to be not larger than 65520, so we also need to honor that when parsing the connection default.
* device: merge stage3 and stage4 ip-config function for IPv4 and IPv6Thomas Haller2019-03-051-1/+1
| | | | (cherry picked from commit 5e71f016057a72e3c0374bdbf2b855b4f58e0a8f)
* all: drop unnecessary includes of <errno.h> and <string.h>Thomas Haller2019-02-121-1/+0
| | | | | "nm-macros-interal.h" already includes <errno.h> and <string.h>. No need to include it everywhere else too.
* core: pass hints as strv to nm_act_request_get_secrets()Thomas Haller2019-02-051-4/+6
| | | | | Extend nm_act_request_get_secrets() API to allow for the underlying flexibility (of the API that it calls) to accept a strv list of hints.
* core: use streq() instead of strcmp() for comparing ip-config methodsThomas Haller2018-12-131-4/+4
| | | | | | | | 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.
* core: use addr-family argument for nm_utils_get_ip_config_method()Thomas Haller2018-12-131-2/+2
| | | | | | | | | | 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.
* modem: cleanup nm_modem_deactivate_async()Thomas Haller2018-10-171-89/+53
| | | | | | | | | | | | | | | - fix stopping ppp-manager. Previously, we would take a reference to priv->ppp_manager to cancel it later. However, deactivate_cleanup() is called first, which already issues nm_ppp_manager_stop(). Thereby, not using a callback and not waiting for the operation to complete. - get rid of this "step" state machine. There are litterally two steps that need to be performed asynchornously. Instead chain the calls. - it is now obviously visible, that the async callback never completes synchronously upon being called (provided that all async operations that it calls themself have this behavior -- which they should).
* ppp: make ppp-manager cancellable via GCancellableThomas Haller2018-10-171-37/+5
| | | | | | | | | | | | | 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.
* modem: don't use GAsyncResult pattern for disconnecting modemThomas Haller2018-10-171-35/+26
| | | | | | | | | We should not use GAsyncResult. At least, not for internal API. It's more cumbersome then helpful, in my opinion. It requires this awkward async_finish() pattern. Instead, let the caller pass a suitable callback of the right type.
* core: give better error reason why device is incompatible with profileThomas Haller2018-07-241-30/+20
| | | | | | | | | | | | | | | | Note the special error codes NM_UTILS_ERROR_CONNECTION_AVAILABLE_*. This will be used to determine, whether the profile is fundamentally incompatible with the device, or whether just some other properties mismatch. That information will be importand during a plain `nmcli connection up`, where NetworkManager searches all devices for a device to activate. If no device is found (and multiple errors happened), we want to show the error that is most likely relevant for the user. Also note, how NMDevice's check_connection_compatible() uses the new class field "device_class->connection_type_check_compatible" to simplify checks for compatible profiles. The error reason is still unused.
* wwan/trivial: rename NMModemClass.check_connection_compatible() to use ↵Thomas Haller2018-07-241-2/+2
| | | | | | | | | | unique name We also have NMDeviceClass.check_connection_compatible(). It is preferable to use unique names, especially for the virtual function table. A reasonable thing to do is grep for the function name to find all places that implement this function. But if different classes use the same name, grep just turns up annoying false positives.
* all: don't use gchar/gshort/gint/glong but C typesThomas Haller2018-07-111-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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[@]}"
* device: introduce mtu sourceBeniamino Galvani2018-06-231-5/+5
| | | | | | | | | Instead of returning a boolean @is_user_config value from get_configured_mtu(), return an mtu-source enum with possible values NONE,CONNECTION. This enum will be expanded later; for now there is no change in behavior. (cherry picked from commit 9f8b0697de24e2b74c8514bb1db44a1a0f857cd9)
* wwan: ensure the route parameters are set on IPv6 only configurationlr/wwan-ppp-route-rh1585611Lubomir Rintel2018-06-131-2/+7
|
* wwan: set the route parameters at the beginning of ip4 configLubomir Rintel2018-06-131-2/+2
| | | | | | | | We set the metric to the routes as we receive them from the PPP plugin. We ought to let the modem know before it starts IPv4 configuration, not right before the commit. https://bugzilla.redhat.com/show_bug.cgi?id=1585611
* ppp-manager: rework stopping NMPPPManager by merging async/sync methodsThomas Haller2018-05-251-17/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* devices/wwan: Stop PPP manager in deactivate_cleanup()Frederic Danis2018-05-181-0/+1
| | | | | | | | | | | | | | When ModemManager exits, pppd is not killed due to nm_exported_object not unexported (ppp_manager refcount = 2). Call to nm_ppp_manager_stop_sync() allows to correctly clean ppp_manager before calling g_clear_object(), as this is done in nm-device-ethernet.c and nm-device-adsl.c. [thaller@redhat.com: rebase and adjust patch] https://bugzilla.gnome.org/show_bug.cgi?id=796108 https://mail.gnome.org/archives/networkmanager-list/2018-May/msg00015.html
* all: use the elvis operator wherever possibleLubomir Rintel2018-05-101-1/+1
| | | | | | | | | | | | | | | | | | | | | Coccinelle: @@ expression a, b; @@ -a ? a : b +a ?: b Applied with: spatch --sp-file ternary.cocci --in-place --smpl-spacing --dir . With some manual adjustments on spots that Cocci didn't catch for reasons unknown. Thanks to the marvelous effort of the GNU compiler developer we can now spare a couple of bits that could be used for more important things, like this commit message. Standards commitees yet have to catch up.
* core: avoid clone of all-connections list for nm_utils_complete_generic()Thomas Haller2018-03-201-1/+1
| | | | | | | | | | | | | | | | | | | NMSettings exposes a cached list of all connection. We don't need to clone it. Note that this is not save against concurrent modification, meaning, add/remove of connections in NMSettings will invalidate the list. However, it wasn't save against that previously either, because altough we cloned the container (GSList), we didn't take an additional reference to the elements. This is purely a performance optimization, we don't need to clone the list. Also, since the original list is of type "NMConnection *const*", use that type insistently, instead of dependent API requiring GSList. IMO, GSList is anyway not a very nice API for many use cases because it requires an additional slice allocation for each element. It's slower, and often less convenient to use.
* ofono: fix crash during complete-connection for Ofono modemThomas Haller2018-03-201-3/+11
| | | | | | | | | | nm_modem_complete_connection() cannot just return FALSE in case the modem doesn't overwrite complete_connection(). It must set the error variable. This leads to a crash when calling AddAndActivate for Ofono type modem. It does not affect the ModemManager implementation NMModemBroadband, because that one implements the method.
* wwan: drop nm_modem_get_data_port() functionth/modem-ip-ifaceThomas Haller2018-02-211-8/+0
| | | | | | It was only used by bluetooth's component_added() check. It should compare rfcomm_iface only against the control-port, not the data-port.
* wwan: rework setting modem's data-portThomas Haller2018-02-211-83/+116
| | | | | | | | | | | | | | | | | Depending on the bearer's configuration method, the data-port is either a networking interface, or an tty for ppp. Let's treat them strictily separate. Also, rework how NM_MODEM_DATA_PORT was used in both contexts. Instead, use the that we actually care about. Also, when nm_device_set_ip_ifindex() fails, fail activation right away. Also, we early try to resolve the network interface's name to an ifindex. If that fails, the device is already gone and we fail early.
* wwan: make NM_MODEM_DATA_PORT not a construct propertyThomas Haller2018-02-211-2/+2
| | | | | The property was never set at construct time. Don't make it a construct property.
* wwan: notify change of modem:data-port when clearing ip-ifaceThomas Haller2018-02-211-1/+2
| | | | | | data-port returns ip-iface, if set. Clearing it, most likely causes the property to change. Emit a notification.
* wwan: add modem:ip-ifindex propertyThomas Haller2018-02-211-2/+51
| | | | Will be used later to replace ip-iface.
* wwan/trivial: rename internal variable ppp_iface to ip_ifaceThomas Haller2018-02-211-6/+6
| | | | | This is really the name of the networking device. Whether it is created by ppp is not that important here. Rename.
* wwan: handle missing data_port in ppp_stage3_ip_config_start() of NMModemThomas Haller2018-02-211-2/+8
| | | | | It's not at all clear, that the data_port is set at this point. Guard against it, and avoid the assertion later.