[review] dcbw/ipv6-fixes: fix IPv6 support in core and plugins
Dan Williams
dcbw at redhat.com
Thu Jun 12 13:10:29 PDT 2014
On Wed, 2014-06-11 at 12:49 +0200, Aleksander Morgado wrote:
> On Tue, Jun 10, 2014 at 8:08 PM, Dan Williams <dcbw at redhat.com> wrote:
> > For QMI, static configuration is always used, because we can always read
> > the IP addresses and DNS servers from the firmware.
>
> One issue with the IPv4 static config.
>
> I have this Huawei device which doesn't return IP Family TLV in the
> Get Current Settings reply:
>
> ModemManager[8148]: <debug> [1402483095.253942] [mm-bearer-qmi.c:476]
> get_current_settings_ready(): IP Family: failed (Field 'IP Family'
> was not found in the message)
> ModemManager[8148]: <debug> [1402483095.253965] [mm-bearer-qmi.c:493]
> get_current_settings_ready(): Domains: failed (Field 'Domain Name
> List' was not found in the message)
> ModemManager[8148]: <debug> [1402483095.253990] [mm-port.c:93]
> mm_port_set_connected(): (wwp0s29u1u2i1): port now connected
>
> The bearer is created, but it shows 'unknown' method for IPv4 and IPv6:
> -------------------------
> IPv4 configuration | method: 'unknown'
> -------------------------
> IPv6 configuration | method: 'unknown'
>
> So NetworkManager fails to connect:
> jun 11 12:37:16 athena NetworkManager[419]: <warn> (cdc-wdm0) failed
> to connect modem: invalid IP config
> jun 11 12:37:16 athena NetworkManager[419]: <info> (cdc-wdm0): device
> state change: prepare -> failed (reason 'unknown') [40 120 1]
>
>
> The culprit lines seem to be around here:
>
> if (qmi_message_wds_get_current_settings_output_get_ip_family
> (output, &ip_family, &error)) {
> mm_dbg (" IP Family: %s",
> (ip_family == QMI_WDS_IP_FAMILY_IPV4) ? "IPv4" :
> (ip_family == QMI_WDS_IP_FAMILY_IPV6) ? "IPv6"
> : "unknown");
>
> if (!qmi_message_wds_get_current_settings_output_get_mtu
> (output, &mtu, &error)) {
> mm_dbg (" MTU: failed (%s)", error->message);
> g_clear_error (&error);
> }
>
> if (ip_family == QMI_WDS_IP_FAMILY_IPV4)
> ctx->ipv4_config = get_ipv4_config (output, mtu);
> else if (ip_family == QMI_WDS_IP_FAMILY_IPV6)
> ctx->ipv6_config = get_ipv6_config (output, mtu);
> } else {
> mm_dbg (" IP Family: failed (%s)", error->message);
> g_clear_error (&error);
> }
>
> When no IP Family TLV is given, I guess we should assume it will be
> IPv4? Something like:
>
> diff --git a/src/mm-bearer-qmi.c b/src/mm-bearer-qmi.c
> index 5c0a9e6..7f321f3 100644
> --- a/src/mm-bearer-qmi.c
> +++ b/src/mm-bearer-qmi.c
> @@ -473,8 +473,9 @@ get_current_settings_ready (QmiClientWds *client,
> else if (ip_family == QMI_WDS_IP_FAMILY_IPV6)
> ctx->ipv6_config = get_ipv6_config (output, mtu);
> } else {
> - mm_dbg (" IP Family: failed (%s)", error->message);
> + mm_dbg (" IP Family: failed (%s). Assuming IPv4.", error->message);
> g_clear_error (&error);
> + ctx->ipv4_config = get_ipv4_config (output, mtu);
> }
Pushed a possibly cleaner fixup for that. But right on target.
> And BTW; if reading the MTU fails, the 'mtu' variable won't get
> initialized, but will still be used afterwards:
Pushed a fixup.
Dan
More information about the ModemManager-devel
mailing list