Linux Kernel Tuning for IP Version 6 Networking

By Madepogu Rajendra Prasad
Senior Software Engineer, HCL Technologies, NOIDA
Madepogu Rajendra Prasad

Abstract
This paper describes the procedure for enhancing the Linux operating system with Internet Protocol version 6 (IPv6) networking feature. This paper also describes the linux kernel with IPV6 networking support, booting linux desktop machines with new IPV6 network supportive kernel, and its graphical representation. This paper lists the procedure to test the IPv6 enabled linux desktop kernel. The resultant IPv6 enabled linux kernels scale over Internet Protocol version 4 linux kernels in terms of built-in security support (IPSEC), efficient routing, address auto configuration, automated network (router) renumbering, and built in mobility support(MIPv6).

1. Introduction
Internet Protocol version 6 (IPv6) has been under development for many years and now it is already deployed extensively on production networks. IPv6 is a new layer 3 protocol. IPv4 was designed a long time ago (RFC 760 / Internet Protocol) and since its inception, there have been many requests for more addresses and enhanced capabilities. The latest RFC being RFC 2460 / Internet Protocol Version 6 Specification. Major changes in IPv6 are the redesign of the header, including the increase of address size from 32 bits to 128 bits. Since layer 3 is responsible for end-to-end packet transport using packet routing based on addresses, it must include the new IPv6 addresses (source and destination), like IPv4. The first IPv6 related network code was added to the Linux kernel 2.1.8 in November 1996 by Pedro Roque. It was based on the BSD API.

The remarkable growth of the Internet Protocol version 4 (IPv4)-based Internet has highlighted several fundamental limitations with the protocol. Internet Protocol version 6 (IPv6) addresses these issues and provides additional enhanced services and functionalities. IPv6, also called IP-NG, is the “next generation” Internet Protocol and is the designated successor to IPv4. As IPv4 has expanded, IPv4 routing tables have expanded as well. This expansion has heavily taxed the underlying routing infrastructure.

2. Testing Linux Operating System for IPv6 Networking Support
To check for IPv6 support in the current running kernel, developer can use any of the following methodologies given below.

2.1. Methodology 1
In this procedure linux developer can use “cat /proc/net/if_inet6″ command to test linux operating system to test whether your current running kernel supports Internet Protocol version 6 networking feature and to take a look into your /proc-file-system. Upon the execution of the above mentioned command, the following entry must exist:

Linux Kernel for IPv6 Screen Shot 1

If the current linux kernel is not supporting IP version 6 (IPv6)_networking feature, the following entry must exist:

2.2. Methodology 2
Second method to test IPv6 protocol stack support for linux operating system is via ipv6 module. The ipv6 module has IPv6 protocol stack for linux operating system. If above cat command fails, it is quite likely, that the IPv6 module is not loaded. Just login as root and type the following command, enter:

Linux Kernel for IPv6 Screen Shot 2

If the current linux kernel is not supportive to IPv6 networking the following entry must exist:

Linux Kernel for IPv6 Screen Shot 3

2.3. Methodology 3
In this method linux developer/user can use “ifconfig” command to test the IPV6 network support for linux kernel. The following procedure can be used:

i) Reboot linux desktop machine
ii) Look for correct interface configuration using “ifconfig” command. On startup each interface is assigned a so called link-local address, which is automatically generated from the interface identifier (i.e. Ethernet MAC) and the prefix is fe80
iii) IPv6 address can be viewed as highlighted below.

Linux Kernel for IPv6 Screen Shot 4

If the current linux kernel does not supporting IPv6 networking, the execution of “ifconfig” will give the following display:

Linux Kernel for IPv6 Screen Shot 5

After testing linux kernel with above methodologies, the linux kernel is supporting the IPv6 networking protocol, the following procedure can be used to upgrade the linux kernel to IPv6.

3. Building and Booting IPv6 Network Supportive Linux Kernel
By default IPv6 is disabled in 2.4.x version linux operating systems. To enable IPv6 networking feature on linux kernel the following procedure can used.

3.1. Downloading Linux Kernel
Download latest kernel/stable kernel (I have taken linux-2.6.18.2.tar.bz2).

3.2. Building Kernel Image
a) Run “make menuconfig “command to configure linux kernel. Select kernel options as shown below to enable IPv6:

Linux Kernel for IPv6 Screen Shot 6

Linux Kernel for IPv6 Screen Shot 7

b) Run “make bzImage” to build images
c) Run “make modules” to build modules
d) Run “make modules_install” as a super user to install modules.

3.3. Creating Initial RAM Disk
a) Run “mkinitrd /boot/initrd-2.6.18.2.img 2.6.18.2″ to create initial ram disk image
b) Copy initial ram disk, kernel image and System. map as below:

#cp arch/i386/boot/bzImage /boot/bzImage-2.6.18.2
# cp System.map /boot/System.map-2.6.18.2
# ln -s /boot/System.map-2.6.18.2 /boot/System.map

3.4. Boot loader (grub) configuration
Add an entry in a boot loader (/etc/grub.conf) as shown below:

title IPV6 Kernel (2.6.18.2)
root (hd0,1)
kernel /boot/bzImage-2.6.18.2 ro root=LABEL=/
initrd /boot/initrd-2.6.18.2.img

Graphical view of grub.conf on linux system is:

Linux Kernel for IPv6 Screen Shot 8

4. Conclusion
That’s pretty much it; reboot your desktop linux machine with newly IPv6 enabled kernel. This paper is helpful for linux application developers whose work is related to Internet Protocol Version 6 networking application development on linux environment. Some times developer do not know about the operating system — whether it supports IPv6 or not. This paper gives a clear picture whether your Linux Kernel supports IPv6 networking feature or not. If the linux kernel does not supports IPv6, this paper helps readers with upgrading the respective kernel to IPv6 network. Certainly the time for ignoring IPv6 is past. This is the time for understanding it, recognizing it, and deploying its advantages.

5. References
[1] Robert Love “Linux Kernel Development” (2nd Edition) (Novell Press)
[2] IPv6 & Linux – How-To
[3] USAGI