ioctl
At the
top of Figure 3-4, you can see how an
ioctl call is issued. Let's see an example involving
ifconfig.
We said earlier that the ifconfig command uses
ioctl to communicate with the kernel. For example,
when the system administrator types a command like ifconfig eth0
mtu 1250 to change the MTU of the interface eth0, ifconfig opens a socket,
initializes a local data structure with the information received from the system
administrator (data in the example), and passes it to
the kernel with an ioctl call. SIOCSIFMTU is the command identifier.
struct ifreq data;
fd = socket(PF_INET, SOCK_DGRAM, 0);
< ... initialize "data" ...>
err = ioctl(fd, SIOCSIFMTU, &data);ioctl commands are processed by the kernel in
different places. Figure 3-4 shows how
the most common ioctl commands used by the networking
code are dispatched by sock_ioctl and routed to the
right function handler. We will not see how sock_ioctl
is invoked or how transport protocols like UDP and TCP register their handlers. If you
desire to dig into this part of the code, you can use the figure as a starting point. For
the routines that we cover in this book, the figure provides a reference to the right
chapter.

Figure 3-3. Creation of the core directories in /proc/sys/net
The name of the ioctl commands in the figure is parsed (split into components) for your convenience. For example, the command used to add a route to a ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access