Linux Kernel Architecture

(Jacob Rumans) #1

Networks


That Linux is a child of the Internet is beyond contention. Thanks, above all, to Internet communi-
cation, the development of Linux has demonstrated the absurdity of the widely held opinion that
project management by globally dispersed groups of programmers is not possible. Since the first
kernel sources were made available on an ftp server more than a decade ago, networks have always
been the central backbone for data exchange, for the development of concepts and code, and for the
elimination of kernel errors. The kernel mailing list is a living example that nothing has changed.
Everybody is able to read the latest contributions and add their own opinions to promote Linux
development — assuming, of course, that the opinions expressed are reasonable.


Linux has a very cozy relationship with networks of all kinds — understandably as it came of age
with the Internet. Computers running Linux account for a large proportion of the servers that build
the Internet. Unsurprisingly, network implementation is a key kernel component to which more
and more attention is being paid. In fact, there are very few network options that are not supported
by Linux.


Implementation of network functionality is one of the most complex and extensive parts of the
kernel. In addition to classic Internet protocols such as TCP, UDP, and the associated IP transport
mechanism, Linux also supports many other interconnection options so that all conceivable types
of computers and operating systems are able to interoperate. The work of the kernel is not made
any simpler by the fact that Linux also supports a gigantic hardware spectrum dedicated to data
transfer — ranging from Ethernet cards and token ring adapters to ISDN cards and modems.


Nevertheless, Linux developers have been able to come up with a surprisingly well-structured
model to unify very different approaches. Even though this chapter is one of the longest in the book,
it makes no claim to cover every detail of network implementation. Even an outline description of
all drivers and protocols is beyond the scope of a single book — many would be needed owing to
the volume of information. Not counting device drivers for network cards, the C implementation
of the network layer occupies 15 MiB in the kernel sources, and this equates to more than 6,000
printed pages of code. The shear number of header files that relate to networking has motivated the
kernel developers to store them not in the standard locationinclude/linux, but devote the special
directoryinclude/netto them. Embedded in this code are manyconceptsthat form the logical

Free download pdf