diff -ur a/plugins/huawei/77-mm-huawei-net-port-types.rules b/plugins/huawei/77-mm-huawei-net-port-types.rules --- a/plugins/huawei/77-mm-huawei-net-port-types.rules +++ b/plugins/huawei/77-mm-huawei-net-port-types.rules @@ -8,9 +8,13 @@ SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="ff", ATTRS{bInterfaceSubClass}=="01", ATTRS{bInterfaceProtocol}=="02", ENV{ID_MM_HUAWEI_AT_PORT}="1" SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="ff", ATTRS{bInterfaceSubClass}=="02", ATTRS{bInterfaceProtocol}=="01", ENV{ID_MM_HUAWEI_MODEM_PORT}="1" SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="ff", ATTRS{bInterfaceSubClass}=="02", ATTRS{bInterfaceProtocol}=="02", ENV{ID_MM_HUAWEI_AT_PORT}="1" +# Huawei E3276 firmware 21.192.13.00.00 +SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="ff", ATTRS{bInterfaceSubClass}=="02", ATTRS{bInterfaceProtocol}=="12", ENV{ID_MM_HUAWEI_AT_PORT}="1" # Only the standard ECM or NCM port can support dial-up with AT NDISDUP through AT port SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="02", ATTRS{bInterfaceSubClass}=="06",ATTRS{bInterfaceProtocol}=="00", ENV{ID_MM_HUAWEI_NDISDUP_SUPPORTED}="1" SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="02", ATTRS{bInterfaceSubClass}=="0d",ATTRS{bInterfaceProtocol}=="00", ENV{ID_MM_HUAWEI_NDISDUP_SUPPORTED}="1" +# Huawei E3276 firmware 21.192.13.00.00 +SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="ff", ATTRS{bInterfaceSubClass}=="02",ATTRS{bInterfaceProtocol}=="16", ENV{ID_MM_HUAWEI_NDISDUP_SUPPORTED}="1" LABEL="mm_huawei_port_types_end" diff -ur a/plugins/huawei/mm-broadband-bearer-huawei.c b/plugins/huawei/mm-broadband-bearer-huawei.c --- a/plugins/huawei/mm-broadband-bearer-huawei.c +++ b/plugins/huawei/mm-broadband-bearer-huawei.c @@ -227,7 +227,10 @@ case CONNECT_3GPP_CONTEXT_STEP_FIRST: { MMBearerIpFamily ip_type; - ip_type = mm_bearer_properties_get_ip_type (mm_bearer_peek_config (MM_BEARER (ctx->self))); + /* Default to IPv4 if not specified */ + if ((ip_type = mm_bearer_properties_get_ip_type (mm_bearer_peek_config (MM_BEARER (ctx->self)))) == MM_BEARER_IP_FAMILY_UNKNOWN) { + ip_type = MM_BEARER_IP_FAMILY_IPV4; + } if (ip_type != MM_BEARER_IP_FAMILY_IPV4) { g_simple_async_result_set_error (ctx->result, MM_CORE_ERROR, @@ -256,13 +259,26 @@ user = mm_bearer_properties_get_user (mm_bearer_peek_config (MM_BEARER (ctx->self))); passwd = mm_bearer_properties_get_password (mm_bearer_peek_config (MM_BEARER (ctx->self))); auth = mm_bearer_properties_get_allowed_auth (mm_bearer_peek_config (MM_BEARER (ctx->self))); - encoded_auth = huawei_parse_auth_type (auth); + + /* Default to no authentication if not specified */ + if ((encoded_auth = huawei_parse_auth_type (auth)) == MM_BEARER_HUAWEI_AUTH_UNKNOWN) { + encoded_auth = MM_BEARER_HUAWEI_AUTH_NONE; + } - command = g_strdup_printf ("AT^NDISDUP=1,1,\"%s\",\"%s\",\"%s\",%d", - apn == NULL ? "" : apn, - user == NULL ? "" : user, - passwd == NULL ? "" : passwd, - encoded_auth == MM_BEARER_HUAWEI_AUTH_UNKNOWN ? MM_BEARER_HUAWEI_AUTH_NONE : encoded_auth); + if (!user && !passwd) { + command = g_strdup ("AT^NDISDUP=1,1"); + } else if (encoded_auth == MM_BEARER_HUAWEI_AUTH_NONE) { + command = g_strdup_printf ("AT^NDISDUP=1,1,\"%s\",\"%s\",\"%s\"", + apn == NULL ? "" : apn, + user == NULL ? "" : user, + passwd == NULL ? "" : passwd); + } else { + command = g_strdup_printf ("AT^NDISDUP=1,1,\"%s\",\"%s\",\"%s\",%d", + apn == NULL ? "" : apn, + user == NULL ? "" : user, + passwd == NULL ? "" : passwd, + encoded_auth); + } mm_base_modem_at_command_full (ctx->modem, ctx->primary, command,