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