The Nokia N900 mobile computer comes with support for both Wi-Fi and 3G Internet connectivity, and as such, the Maemo 5 operational system provides UI support for setting up Wi-Fi and 3G Internet connectivity. However, the Linux kernel version distributed with Maemo 5 (i.e. N900) does not have IPv6 support enabled by default, and hence the N900 is an IPv4-only device. As the IPv4 address space depletion problem becomes more apparent (see IPv4 address space depletion reports, updated in a daily-basis), need for IPv6 increases, and so des interest for experiments of parallel IPv4 and IPv6 connectivity on cellular networks. Wi-Fi networks can be easily updated to provide IPv6 capabilities (in some deployments, it's a matter of a simple re-configuration), but people interested in IPv6 connectivity will not find by default in N900 devices support for IPv6. Furthermore, in 3G networks dual-stack support requires capability for two, parallel Packet Data Protocol (PDP) contexts (one for the IPv4 connectivity and another for the IPv6 connectivity), which require the configuration of two different Access Pont Names (APNs) (one for each PDP context). Currently the Maemo 5 UI for setting up 3G connectivity does not allow configuration and use of more than one APN (although the Maemo 5's 3G connectivity infrastructure itself is dual-stack ready).
Solution OverviewThe idea of this project is to bring IPv6 Internet connectivity capabilities for the Wi-Fi and 3G interfaces of the Maemo 5 (and as a consequence, in N900), thereby enabling users to start testing today the solutions for the IPv4 address depletion problem soon-to-be available on their mobile operators. In fact, IPv6 support is already implemented both on the N900 hardware and on the Maemo 5 connectivity framework, such that enabling it requires following the series of steps listed below:
In this section we provide detailed instructions on how to install an IPv6-enabled kernel (the so-called Power Kernel), produced by Thomas Tanner ("titan") from Maemo forum (see Maemo talk thread). This kernel version provides notonly IPv6 support (including Mobile IPv6, privacy and ip6tables), but also iptables (NAT,connection tracking, packet filtering), Wifi mesh, QoS, hotspot fixes, IP tunneling, device mapper+dmloop, cryptoloop, builtin ext3 for booting from other media, ext4, XFS, reiserfs, NTFS reading, ISO9660, UDF, CIFS, automounter, EFI partitions, UTF8 codepages, mouse+joystick input, kernel config, cryptd, SHA256+512, blowfish, USB 1.1+2.0+generic drivers,USB hubs,USB video+serial, USB/IP, kexec and more...
Prior to proceeding with the installation, the Extras, Extras-Testing and Extras-Devel repositories on the N900 device have to be enabled. The Extras repository is supposed to be pre-configured in the Nokia N900, but it is disabled by default. To enable it:
If your Wi-Fi network has dual-stack (IPv4/IPv6) connectivity, then the use of the updated kernel is enough for gaining IPv6 access. However, if your Wi-Fi network is IPv6-only, further configuration steps are required.
In order to ensure your N900 will be able to resolve DNS names in IPv6-only Wi-Fi networks, you must add (not replace!) a proper DNS server in the file /etc/resolv.conf. As an example, in our environment this corresponds to adding (not replacing!) the following line in the /etc/resolv.conf file: nameserver 2001:470:b:c8::1
In order to enable IPv6 connectivity on an IPv6-only Wi-Fi interface, you need first to disable the feature of auto-drop of Wi-Fi interface when the DHCPv4 request fails. To do that:
In order to enable Internet connectivity using 3GPP cellular networks (i.e. GPRS/EDGE/3G/etc...) for N900, it is necessary to setup a new cellular Internet Access Point (IAP), which requires configuring the given Access Pont Names (APNs) for that network. An APN identifies an IP Packet Data Network (PDN)that a mobile data user wants to communicate with, and is necessary in order to enable the creation of Packet Data Protocol (PDP) contexts. In the case of dual-stack (IPv4/IPv6) Internet connectivity for cellular networks, the default solution for pre-Release 8 3GPP networks is to establish two separate PDP contexts, one for the IPv4 connectivity and another for the IPv6 connectivity, which in the N900 case means setting up two separate IAPs, each one with the required APN configuration. However, N900 does not allow connecting to more than one IAP at the same time through the Internet Connectivity (ICd2) User Interface (UI), and therefore, although both the N900 device HW and the Linux kernel do have IPv6 capabilities, the N900 UI is not prepared to allow dual-stack Internet connectivity to occur for 3G networks.
N900 cellular connectivity framework does provide PDP context creations by console script using a D-Bus interface, and as such, we can automate dual-stack connectivity by adding a set of scripts that create the IPv6 PDP context when the IPv4 PDP context is created, and also deleting the IPv6 PDP context when the IPv4 context is deleted. By doing that, each PDP context will have its own Linux interface (say, gprs0 for IPv4, gprs1 for IPv6), which is actually not an issue as all the correspondent IPv4 traffic is routed automatically to/from the IPv4 interface (i.e. gprs0), as well as all IPv6 traffic is routed automatically to/from the IPv6 interface (i.e. gprs1). The required scripts for the automation of the creation (00_enable_apn_ipv6) and deletion (00_disable_apn_ipv6) of the IPv6 PDP contexts can be found here (therefore, you must download them on the N900 and save in some place you can remember later), and the following setup steps must be performed prior to enabling dual-stack cellular connectivity:
After that, cellular IPv6 connectivity (through the gprs1 interface) will be available whenever cellular IPv4 connectvity is also activated, and cellular IPv6 connectivity will be deactivated whenever the cellular IPv4 connectivity is also deactivated.
In most cases it should be enough to automatically use the DNS server which address is obtained during the IPv4 PDP context setup. However, in the case you need separate DNS server configuration for the cellular IPv6 connectivity, you will need to setup a new DNS server entry on the file /var/run/resolv.conf.gprs, which exists only while the cellular Internet connectivity is up, and therefore whenever the cellular Internet connectivity is up this DNS entry must be re-entered. By default, the script we provided does not do that, so in order to do that you need to edit the file at /etc/network/if-up.d/00_enable_apn_ipv6, set ADD_IPv6_DNS="yes" and then set your IPv6 DNS server address in IPv6_DNS.
Setting up IPv6 Connectivity on built-in Web browserThe N900 native Web browser comes with IPv6 support disabled by default. However, this can be changed by following the steps below:
In order to test it, access the address http://www.kame.net and check if the turtle image at the top of the page must appear swimming, otherwise it didn't accessed the page via IPv6.