设为首页 加入收藏

TOP

TCP/IP详解2 学习笔记2---ifnet ifaddr(一)
2014-11-23 17:31:53 】 浏览:1173
Tags:TCP/IP 详解 学习 笔记 --- ifnet ifaddr

Linux下用netdevice来描述一个接口,而BSD则用ifnet,包括接口的属性,硬件信息,统计信息,函数指针,输出队列


/*


* Structure describing information about an interface


* which may be of interest to management entities.


*/


struct ifnet {


char *if_name; /* name, e.g. ``en'' or ``lo'' */


struct ifnet *if_next; /* all struct ifnets are chained */


struct ifaddr *if_addrlist; /* linked list of addresses per if */


int if_pcount; /* number of promiscuous listeners */


caddr_t if_bpf; /* packet filter structure */


唯一的表示这个接口


u_short if_index; /* numeric abbreviation for this if */


区分相同驱动的接口


short if_unit; /* sub-unit for lower level driver */


short if_timer; /* time 'til if_watchdog called */


#define IFF_UP 0x1 /* interface is up */


#define IFF_BROADCAST 0x2 /* broadcast address valid */


#define IFF_DEBUG 0x4 /* turn on debugging */


#define IFF_LOOPBACK 0x8 /* is a loopback net */


#define IFF_POINTOPOINT 0x10 /* interface is point-to-point link */


#define IFF_NOTRAILERS 0x20 /* avoid use of trailers */


#define IFF_RUNNING 0x40 /* resources allocated */


#define IFF_NOARP 0x80 /* no address resolution protocol */


#define IFF_PROMISC 0x100 /* receive all packets */


#define IFF_ALLMULTI 0x200 /* receive all multicast packets */


#define IFF_OACTIVE 0x400 /* transmission in progress */


#define IFF_SIMPLEX 0x800 /* can't hear own transmissions */


#define IFF_LINK0 0x1000 /* per link layer defined bit */


#define IFF_LINK1 0x2000 /* per link layer defined bit */


#define IFF_LINK2 0x4000 /* per link layer defined bit */


#define IFF_MULTICAST 0x8000 /* supports multicast */


short if_flags; /* up/down, broadcast, etc. */


struct if_data {


/* generic interface information */


u_char ifi_type; /* ethernet, tokenring, etc */


u_char ifi_addrlen; /* media address length */


u_char ifi_hdrlen; /* media header length */


u_long ifi_mtu; /* maximum transmission unit */


u_long ifi_metric; /* routing metric (external only) */


u_long ifi_baudrate; /* linespeed */


/* volatile statistics */


u_long ifi_ipackets; /* packets received on interface */


u_long ifi_ierrors; /* input errors on interface */


u_long ifi_opackets; /* packets sent on interface */


u_long ifi_oerrors; /* output errors on interface */


u_long ifi_collisions; /* collisions on csma interfaces */


u_long ifi_ibytes; /* total number of octets received */


u_long ifi_obytes; /* total number of octets sent */


u_long ifi_imcasts; /* packets received via multicast */


u_long ifi_omcasts; /* packets sent via multicast */


u_long ifi_iqdrops; /* dropped on input, this interface */


u_long ifi_noproto; /* destined for unsupported protocol */


struct timeva l ifi_lastchange;/* last updated */


} if_data;


/* procedure handles */


驱动函数的挂载点


int (*if_init) /* init routine */


__P((int));


int (*if_output) /* output routine (enqueue) */


__P((struct ifnet *, struct mbuf *, struct sockaddr *,


struct rtentry *));


int (*if_start) /* initiate output routine */


__P((struct ifnet *));


int (*if_done) /* output complete routine */


__P((struct ifnet *)); /* (XXX not used; fake prototype) */


int (*if_ioctl) /* ioctl routine */


__P((struct ifnet *, int, caddr_t));


int (*if_reset)


__P((int)); /* new autoconfig will permit removal */


int (*if_watchdog) /* timer routine */


__P((int));


输出队列结构,很简洁


struct ifqueue {


struct mbuf *ifq_head;


struct mbuf *ifq_tail;


int ifq_len;


int ifq_maxlen;


int ifq_drops;


} i

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Linux协议栈查找算法优化随想 下一篇TCP/IP详解2 学习笔记---mbuf

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目