Content-type: text/html
Manpage of NETDEVICE
NETDEVICE
Section: Linux Programmer's Manual (7)
Updated: 2 May 1999
Index
Return to Main Contents
NAME
netdevice - 底层访问 Linux 网络设备.
总览
#include <sys/ioctl.h>
#include <net/if.h>
描述
本手册描述用于配置网络设备的套接字接口.
Linux 支持一些配置网络设备的标准 ioctl.
它们用于任意套接字描述符,而无须了解其类型或家族.它们传递一个
ifreq
结构:
struct ifreq
{
char ifr_name[IFNAMSIZ]; /* 接口名字 */
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;
};
}
struct ifconf
{
int ifc_len; /* 缓冲区尺寸 */
union {
char * ifc_buf; /* 缓冲区地址 */
struct ifreq *ifc_req; /* 结构数组 */
};
};
一般说来,用户要选择操作的设备,可以通过设置
ifr_name
为接口的名字实现. 结构体的其他成员可以共享内存.
IOCTLS
如果一个 ioctl 被标记为需要特殊权限, 那么使用它需要有效用户号为0, 或拥有
CAP_NET_ADMIN
能力. 否则
将返回
EPERM
- SIOCGIFNAME
-
如果给出
ifr_ifindex,
则返回存放在
ifr_name
中的接口名称.这是唯一能够返回存放在
ifr_name
里内容的 ioctl.
- SIOCGIFINDEX
-
把接口的接口索引
放到
ifr_ifindex
- SIOCGIFFLAGS, SIOCSIFFLAGS
-
取得或设置设备的活动标志字.
ifr_flags
包含下列值的屏蔽位:
设备标志
|
IFF_UP | 接口运行中.
|
IFF_BROADCAST | 有效的广播地址集.
|
IFF_DEBUG | 内部调试标志.
|
IFF_LOOPBACK | 是自环接口.
|
IFF_POINTOPOINT | 是点到点链路接口.
|
IFF_RUNNING | 资源已分配.
|
IFF_NOARP | 无 arp 协议, 第二层目标地址没设置.
|
IFF_PROMISC | 接口为随机(promiscuous)模式.
|
IFF_NOTRAILERS | 避免使用trailer .
|
IFF_ALLMULTI | 接受所有组播(multicast)分组数据.
|
IFF_MASTER | 主负载平衡群(bundle).
|
IFF_SLAVE | 从负载平衡群(bundle).
|
IFF_MULTICAST | 支持组播(multicast).
|
IFF_PORTSEL | 可以通过ifmap选择介质类型.
|
IFF_AUTOMEDIA | 激活自动介质选择.
|
IFF_DYNAMIC |
接口关闭时放弃地址.
|
设置活动标志字是特权操作, 但是对任何进程可读.
- SIOCGIFMETRIC, SIOCSIFMETRIC
-
使用
ifr_metric
取得或设置设备的 metric (度量)值.目前还没有实现这一功能.读操作使
ifr_metric
置 0, 而设置它会返回
EOPNOTSUPP.
- SIOCGIFMTU, SIOCSIFMTU
-
使用
ifr_mtu
取得或设置设备的 MTU (最大传输单元).
设置 MTU 是特权操作. MTU 设的过小可能导致内核崩溃.
- SIOCGIFHWADDR, SIOCSIFHWADDR
-
使用
ifr_hwaddr
取得或设置设备的硬件地址.设置硬件地址是特权操作.
- SIOCSIFHWBROADCAST
-
使用
ifr_hwaddr
取得或设置设备的硬件广播地址.这是个特权操作.
- SIOCGIFMAP, SIOCSIFMAP
-
使用
ifr_map
取得或设置接口的硬件参数.设置这个参数是特权操作.
struct ifmap
{
unsigned long mem_start;
unsigned long mem_end;
unsigned short base_addr;
unsigned char irq;
unsigned char dma;
unsigned char port;
};
对 ifmap 结构的诠释取决于设备驱动程序和体系结构.
- SIOCADDMULTI, SIOCDELMULTI
-
使用
ifr_hwaddr
从设备的链路层组播过滤器 (multicase filter) 中添加或删除地址.
这些是特权操作.参看
packet(7)
看看替换品.
- SIOCGIFTXQLEN, SIOCSIFTXQLEN
-
使用
ifr_qlen
取得或设置设备的传输队列长度.
设置传输队列长度是特权操作.
- SIOCSIFNAME
-
把
ifr_ifindex
内的名称改成
ifr_newname
内的名称. 这是个特权操作.
- SIOCGIFCONF
-
返回一系列接口地址(传输层). 目前为了兼容, 指的是 AF_INET 地址.
用户传送一个
ifconf
结构作为 ioctl 的参数.在
ifc_req
中含有一个指向
ifreq
结构数组的指针,其长度以字节为单位存放在
ifc_len.
内核用所有正在使用的第三层地址填充 ifreqs:
ifr_name
装有接口的名称(eth0:1等),
ifr_addr
是地址. 内核在
ifc_len
中返回实际长度;
如果它等于初始长度, 用户可以认为有溢出, 应该换一个更大些的缓冲区重试.
没有错误时 ioctl 返回 0, 否则返回 -1, 溢出不算错误.
大多数协议支持它们自己的 ioctl 功能来配置协议特定的接口操作.具体情况
参看那些协议的帮助手册.要配置 IP 地址参看
ip(7).
另外一些设备支持专用 ioctl, 它们在这里没有叙述.
注意
SIOCGIFCONF
是专门针对 IP 的, 它属于
ip(7).
注意
不含有地址或没有
IFF_RUNNING
标志的接口名称可以经由
/proc/net/dev
看到.
另见
ip(7), proc(7)
[中文版维护人]
徐明 E-mail: xuming@bigfoot.com
[中文版最新更新]
2000/10/15
《中国 Linux 论坛 man 手册页翻译计划》: www.cmpp.net/
Index
- NAME
-
- 总览
-
- 描述
-
- IOCTLS
-
- 注意
-
- 注意
-
- 另见
-
- [中文版维护人]
-
- [中文版最新更新]
-
This document was created by
man2html,
using the manual pages.
Time: 14:43:07 GMT, April 08, 2001