[PATCH 0/3] Enabling IPv6 on Qualcomm MDM9x00 chipsets

Bjørn Mork bjorn at mork.no
Wed Nov 27 03:54:08 PST 2013


I have tried to get IPv6 going on the Sierra Wireless MC7710 from time
to time ever since I got it in April 2012. I had some success with a
Huawei E392 using the same MDM9200 chipset, so I expected IPv6 to just
work on the MC7710.  But it didn't.  It should be noted that I had
access to multiple E392 modems at that time, and only some of them
would connect to an IPv6 APN.  The others showed symptoms similar to
the MC7710: PDP type IPV6 or IPV4V6 can be configured, but any
connection attempt would fail.

Then, in July this year, another frustrated MC7710 user continued the
old thread I initially started on Sierra's forums, and managed to
describe the problem a lot better (with a lot less side tracking...):
http://forum.sierrawireless.com/viewtopic.php?f=117&t=6126&p=30599&hilit=ipv6#p29460

The discussion following documented the fact that there exists a
"magic" AT command enabling IPv6 support in the MC7710. This turned
out to be the problem.  IPv6 support was disabled. Unfortunately
the actual command is not documented in any publically available
documentation AFAIK, whether under NDA or not, and is only disclosed
to Sierra Wireless customers under NDA.  So it cannot be disclosed.

But NVRAM dumps are not covered by the NDA, and diffing dumps
before and after running the command shows that there is a single
bit toggled in NVRAM: the first byte of item #1896 (0x0768) changes
from 00 to 01.

Now, I still had an E392 modem with the same problem, and Huawei
doesn't have a similar AT command AFAIK. Reading NVRAM item #1896
showed that it was unpopulated, returning an INACTIVE status. But
writing 01 to it was successful. And it caused IPv6 to magically
start working!

So having tested this on two MDM9200 based modems from two different
vendors, I am pretty sure that this NVRAM item should be set to 01 on
these devices. The same may also apply to other Qualcomm devices, but
I've not been able to test it.  The MDM8200 based Huawei E367 modem I
have will not let me set a IPV6 PDP type, so it will not support IPv6
in any case.  FWIW, the NVRAM item was unpopulated on this modem as
well and writing to it doesn't seem to have any ill effects.

But if you have a Qualcomm based device which appears to support IPv6
(has the IPV6 PDP type) and an IPv6 enabled SIM, but still cannot make
it connect, then please try out this utility.

Note that if you have an IPv6 *only* SIM, like I have, then you also
have to change the PDP type of the default profile to IPV6 and restart
the modem.  Else it won't work.  The same goes for IPv4 *only* SIMs,
actually: If the default profile has a type different from IP, then
the modem will fail to attach to the network.

So how do you find your default profile?  It's often the first one,
listed as 1 in the output from AT+CGDCONT?.  So an easy way to change
it to IPV6 is by using the AT command interface:

 AT+CGDCONT=1,"IPV6"

You can verify that this in fact changed the default by using qmicli:

 bjorn at nemi:~$ qmicli -d /dev/cdc-wdm0 --wds-get-default-settings=3gpp
 Default settings retrieved:
         APN: ''
         PDP type: 'ipv6'
         Username: ''
         Password: ''
         Auth: 'none'


I hope this helps documenting yet another piece of undocumented
magic in these Qualcomm firmwares.  You gotta wonder what they smoked
the day they decided to disable IPv6 by default...



Bjørn Mork (3):
  qcdm: add IPv6 nvram setting
  qcdm: add IPv6 nvram setting to test suite
  qcdm: add utility to display and set the IPv6 preference

 .gitignore                    |    1 +
 libqcdm/src/commands.c        |   88 ++++++++++++
 libqcdm/src/commands.h        |   24 ++++
 libqcdm/src/nv-items.h        |   13 ++
 libqcdm/tests/Makefile.am     |    8 +-
 libqcdm/tests/ipv6pref.c      |  316 +++++++++++++++++++++++++++++++++++++++++
 libqcdm/tests/test-qcdm-com.c |   55 +++++++
 libqcdm/tests/test-qcdm-com.h |    2 +
 libqcdm/tests/test-qcdm.c     |    1 +
 9 files changed, 507 insertions(+), 1 deletion(-)
 create mode 100644 libqcdm/tests/ipv6pref.c

-- 
1.7.10.4



More information about the ModemManager-devel mailing list