您的位置:首页 > 运维架构 > Linux

Linux中ifreq 结构体分析和使用(转)

2015-10-26 12:14 399 查看
结构原型:

struct ifreq

{

#define IFHWADDRLEN 6

union

{

char ifrn_name[IFNAMSIZ];

} ifr_ifrn;

union {

struct sockaddr ifru_addr;

struct sockaddr ifru_dstaddr;

struct sockaddr ifru_broadaddr;

struct sockaddr ifru_netmask;

struct sockaddr ifru_hwaddr;

short ifru_flags;

int ifru_ivalue;

int ifru_mtu;

struct ifmap ifru_map;

char ifru_slave[IFNAMSIZ];

char ifru_newname[IFNAMSIZ];

void __user * ifru_data;

struct if_settings ifru_settings;

} ifr_ifru;

};

#define ifr_name ifr_ifrn.ifrn_name

#define ifr_hwaddr ifr_ifru.ifru_hwaddr

#define ifr_addr ifr_ifru.ifru_addr

#define ifr_dstaddr ifr_ifru.ifru_dstaddr

#define ifr_broadaddr ifr_ifru.ifru_broadaddr

#define ifr_netmask ifr_ifru.ifru_netmask

#define ifr_flags ifr_ifru.ifru_flags

#define ifr_metric ifr_ifru.ifru_ivalue

#define ifr_mtu ifr_ifru.ifru_mtu

#define ifr_map ifr_ifru.ifru_map

#define ifr_slave ifr_ifru.ifru_slave

#define ifr_data ifr_ifru.ifru_data

#define ifr_ifindex ifr_ifru.ifru_ivalue

#define ifr_bandwidth ifr_ifru.ifru_ivalue

#define ifr_qlen ifr_ifru.ifru_ivalue

#define ifr_newname ifr_ifru.ifru_newname

#define ifr_settings ifr_ifru.ifru_settings

基本介绍:

ifreq结构定义在/usr/include/net/if.h,用来配置ip地址,激活接口,配置MTU等接口信息的。其中包含了一个接口的名 字和具体内容——(是个共用体,有可能是IP地址,广播地址,子网掩码,MAC号,MTU或其他内容)。ifreq包含在ifconf结构中。而 ifconf结构通常是用来保存所有接口的信息的。

举例说明:

在Linux系统中,ifconfig命令是通过ioctl接口与内核通信,例如,当系统管理员输入如下命令来改变接口eth0的MTU大小:

ifconfig eth0 mtu 1250

ifconfig命令首先打开一个socket,然后通过系统管理员输入的参数初始化一个数据结构,并通过ioctl调用将数据传送到内核。SIOCSIFMTU是命令标识符。

struct ifreq data;

fd = socket(PF_INET, SOCK_DGRAM, 0);

< ... initialize "data" ...>

err = ioctl(fd, SIOCSIFMTU, &data);

来源:http://blog.csdn.net/zhu114wei/article/details/6927513
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: