.\" Modified, 2011-11-02, <bidulock@openss7.org>, added many basic
.\" but missing ioctls, such as SIOCGIFADDR.
.\"
-.TH NETDEVICE 7 2014-01-24 "Linux" "Linux Programmer's Manual"
+.TH NETDEVICE 7 2017-09-15 "Linux" "Linux Programmer's Manual"
.SH NAME
netdevice \- low-level access to Linux network devices
.SH SYNOPSIS
.SH DESCRIPTION
This man page describes the sockets interface which is used to configure
network devices.
-
+.PP
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.
Most of them pass an
.I ifreq
structure:
-
+.PP
.in +4n
-.nf
+.EX
struct ifreq {
char ifr_name[IFNAMSIZ]; /* Interface name */
union {
char *ifr_data;
};
};
-.fi
+.EE
.in
-
+.PP
Normally, the user specifies which device to affect by setting
.I ifr_name
to the name of the interface.
IFF_LOWER_UP:Driver signals L1 up (since Linux 2.6.17)
IFF_DORMANT:Driver signals dormant (since Linux 2.6.17)
IFF_ECHO:Echo sent packets (since Linux 2.6.25)
-
.TE
.ad
+.PP
Setting the active flag word is a privileged operation, but any
process may read it.
.TP
IFF_SLAVE_NEEDARP:Interface needs ARPs for validation.
IFF_ISATAP:Interface is RFC4214 ISATAP interface.
.TE
-.sp
+.PP
Setting the extended (private) interface flags is a privileged operation.
.TP
.BR SIOCGIFADDR ", " SIOCSIFADDR
Get or set the interface's hardware parameters using
.IR ifr_map .
Setting the parameters is a privileged operation.
-
+.IP
.in +4n
-.nf
+.EX
struct ifmap {
unsigned long mem_start;
unsigned long mem_end;
unsigned char dma;
unsigned char port;
};
-.fi
+.EE
.in
-
+.IP
The interpretation of the ifmap structure depends on the device driver
and the architecture.
.TP
Unlike the others, this ioctl passes an
.I ifconf
structure:
-
+.IP
.in +4n
-.nf
+.EX
struct ifconf {
int ifc_len; /* size of buffer */
union {
struct ifreq *ifc_req; /* array of structures */
};
};
-.fi
+.EE
.in
-
+.IP
If
.I ifc_req
is NULL,
the address.
The actual number of bytes transferred is returned in
.IR ifc_len .
-
+.IP
If the size specified by
.I ifc_len
is insufficient to store all the addresses,
upon return differs by less than
.I sizeof(struct ifreq)
from its original value.
-
+.IP
If an error occurs accessing the
.I ifconf
or
socket addresses,
are IP-specific and belong in
.BR ip (7).
-.LP
+.PP
The names of interfaces with no addresses or that don't have the
.B IFF_RUNNING
flag set can be found via
.IR /proc/net/dev .
-.LP
+.PP
Local IPv6 IP addresses can be found via
.I /proc/net
or via
macro in
.IR <net/if.h> .
Add the following to your program as a workaround:
-.sp
+.PP
.in +4n
-.nf
+.EX
#ifndef ifr_newname
#define ifr_newname ifr_ifru.ifru_slave
#endif
-.fi
+.EE
.in
.SH SEE ALSO
.BR proc (5),