Linux supports some standard ioctls to configure network devices. They can be used on any socket's file descriptor regardless of the family or type. They pass an ifreq structure:
struct ifreq
{
char ifr_name[IFNAMSIZ]; /* Interface name */
union {
struct sockaddr ifr_addr;
struct sockaddr ifr_dstaddr;
struct sockaddr ifr_broadaddr;
struct sockaddr ifr_netmask;
struct sockaddr ifr_hwaddr;
short ifr_flags;
int ifr_ifindex;
int ifr_metric;
int ifr_mtu;
struct ifmap ifr_map;
char ifr_slave[IFNAMSIZ];
char ifr_newname[IFNAMSIZ];
char * ifr_data;
};
}
Normally, the user specifies which device to affect by setting ifr_name to the name of the interface. All other members of the structure may share memory.
| Device flags | |
| IFF_UP | Interface is running. |
| IFF_BROADCAST | Valid broadcast address set. |
| IFF_DEBUG | Internal debugging flag. |
| IFF_LOOPBACK | Interface is a loopback interface. |
| IFF_POINTOPOINT | Interface is a point-to-point link. |
| IFF_RUNNING | Resources allocated. |
| IFF_NOARP | No arp protocol |
| IFF_PROMISC | Interface is in promiscuous mode. |
| IFF_NOTRAILERS | Avoid use of trailers. |
| IFF_ALLMULTI | Receive all multicast packets. |
| IFF_MASTER | Master of a load balancing bundle. |
| IFF_SLAVE | Slave of a load balancing bundle. |
| IFF_MULTICAST | Supports multicast |
| IFF_PORTSEL | Is able to select media type via ifmap. |
| IFF_AUTOMEDIA | Auto media selection active. |
| IFF_DYNAMIC |
The addresses are lost when the interface goes down.
|
Setting the active flag word is a privileged operation, but any process may read it.
struct ifmap
{
unsigned long mem_start;
unsigned long mem_end;
unsigned short base_addr;
unsigned char irq;
unsigned char dma;
unsigned char port;
};
The interpretation of the ifmap structure depends on the device driver and the architecture.
Most protocols support their own ioctls to configure protocol specific interface options. See the protocol man pages for a description.
In addition some devices support private ioctls. These are not described here.