了解并学会使用Linux中ifreq结构体

 结构原型:

    了解并学会使用Linux中ifreq结构体_设计制作_电源/新能源  

/*
* In     te   rface request structure used for socket
* ioctl's.  All interface ioctl's must have pa     ram   eter
* defini     ti   ons which begin with ifr_name.  The
* rem     ai   nder may be interface specific.
*/

struct ifreq
{
#define IFHWADDRLEN 6
union
{
char ifrn_name[IFN     AMS   IZ];  /* if name, e.g. "en0" */
} 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]; /* Just fits the size */
char ifru_newname[IFNAMSIZ];
void __user * ifru_data;
struct if_set  TI ngs ifru_set  TI ngs;
} ifr_ifru;
};

#define ifr_name ifr_ifrn.ifrn_name /* interface name  */
#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address   */
#define ifr_addr ifr_ifru.ifru_addr /* address  */
#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-p lnk */
#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* bro     adc   ast address */
#define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */
#define ifr_flags ifr_ifru.ifru_flags /* flags  */
#define ifr_metric ifr_ifru.ifru_ivalue /* metric  */
#define ifr_mtu  ifr_ifru.ifru_mtu /* mtu   */
#define ifr_map  ifr_ifru.ifru_map /* device map  */
#define ifr_slave ifr_ifru.ifru_slave /* slave device  */
#define ifr_data ifr_ifru.ifru_data /* for use by interface */
#define ifr_ifindex ifr_ifru.ifru_ivalue /* interface index */
#define ifr_bandw     idt   h ifr_ifru.ifru_ivalue    /* link bandwidth */
#define ifr_qlen ifr_ifru.ifru_ivalue /* Queue length  */
#define ifr_newname ifr_ifru.ifru_newname /* New name  */
#define ifr_set  TI ngs ifr_ifru.ifru_set  TI ngs /* Device/proto 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调用将数据传送到内核。SIO     CSI   FMTU是命令标识符。

struct ifreq data;
fd = socket(PF_INET, SOCK_DGRAM, 0);
< ... initialize "data" ...>
err = ioctl(fd, SIOCSIFMTU, &data);




24
107
0
51

相关资讯

  1. 1、马苏《欢乐元帅》演嫦娥吴卓羲演吴刚守护情人2978
  2. 2、香港4大尤物之一,多次给富商当情妇,坦言珍惜做情妇那段时光42
  3. 3、【娱乐观】:邦德大胸肌犹在,却不再处处留情899
  4. 4、斩获银熊,国产短片柏林再创佳绩,这两位中国导演到底有多强?2267
  5. 5、婆婆和妈妈:程莉莎的杀手锏从来都不是郭晓东,难怪黄圣依会羡慕3819
  6. 6、《蜘蛛侠:平行宇宙》要爆?4956
  7. 7、《匹诺曹》将拍真人版汉克斯有望加盟5013
  8. 8、追老公时送9999朵玫瑰,被网友嘲讽,今一家5口幸福美满3137
  9. 9、在后花园发现爸爸骨灰TVB视帝:难怪我的运气这么差!835
  10. 10、《火蓝刀锋》女兵太爷们?制片:男人不够厉害3517
全部评论(0)
我也有话说
0
收藏
点赞
顶部