17.7 Interface Operations
As we showed in the previous section, the SIOCGIFCONF request returns the name and a socket address structure for each interface that is configured. There are a multitude of other requests that we can then issue to set or get all the other characteristics of the interface. The get version of these requests (SIOCGxxx) is often issued by the netstat program, and the set version (SIOCSxxx) is often issued by the ifconfig program. Any user can get the interface information, while it takes superuser privileges to set the information.
These requests take or return an ifreq structure whose address is specified as the third argument to ioctl. The interface is always identified by its name: le0, lo0, ppp0, etc. in the ifr_name member.
Many of these requests use a socket address structure to specify or return an IP address or address mask with the application. For IPv4, the address or mask is contained in the sin_addr member of an Internet socket address structure; for IPv6, it is in the sin6_addr member of an IPv6 socket address structure.
Return the unicast address in the ifr_addr member.
Set the interface address from the ifr_addr member. The initialization function for the interface is also called.
Return the interface flags in the ifr_flags member. The names of the various flags are IFF_xxx and are defined by including the <net/if.h> header. The flags indicate, for example, if the interface is up (IFF_UP), if the interface is a point-to-point interface (IFF_POINTOPOINT), if the interface supports broadcasting (IFF_BROADCAST), and so on.
Set the interface flags from the ifr_flags member.
Return the point-to-point address in the ifr_dstaddr member.
Set the point-to-point address from the ifr_dstaddr member.
Return the broadcast address in the ifr_broadaddr member. The application must first fetch the interface flags and then issue the correct request: SIOCGIFBRDADDR for a broadcast interface or SIOCGIFDSTADDR for a point-to-point interface.
Set the broadcast address from the ifr_broadaddr member.
Return the subnet mask in the ifr_addr member.
Set the subnet mask from the ifr_addr member.
Return the interface metric in the ifr_metric member. The interface metric is maintained by the kernel for each interface but is used by the routing daemon routed. The interface metric is added to the hop count (to make an interface less favorable).
Set the interface routing metric from the ifr_metric member.
In this section, we described the generic interface requests. Many implementations have additional requests as well.