日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

關(guān)于FreeBSD4.4網(wǎng)絡(luò)源代碼接口層數(shù)據(jù)結(jié)構(gòu)ifnet分析說(shuō)明

關(guān)于FreeBSD4.4網(wǎng)絡(luò)源代碼接口層數(shù)據(jù)結(jié)構(gòu)ifnet分析說(shuō)明
作者: xIE_minix

在FreeBSD4.4版的NET/3底部的接口層中包含了一些重要的數(shù)據(jù)結(jié)構(gòu),其中ifnet數(shù)據(jù)結(jié)構(gòu)是有關(guān)網(wǎng)絡(luò)接口設(shè)備通用部分的最重要的數(shù)據(jù)結(jié)構(gòu),他的源代碼部分在文件/usr/src/sys/net/if.h中.要分析鏈路層(網(wǎng)卡驅(qū)動(dòng)程序)源代碼,必須要理解該結(jié)構(gòu).
Ifnet數(shù)據(jù)結(jié)構(gòu)非常大,但是比較容易理解,一個(gè)網(wǎng)絡(luò)接口有一個(gè)ifnet結(jié)構(gòu),每一個(gè)ifnet結(jié)構(gòu)都鏈接起來(lái)了,形成一個(gè)單向鏈表.按他的功能來(lái)分一共有五個(gè)部分:
1. 實(shí)現(xiàn)信息: 包括一些網(wǎng)絡(luò)適配器名,唯一標(biāo)示等.
2. 硬件信息: 包括網(wǎng)絡(luò)適配器的一些屬性,如以太網(wǎng),PPP等
3. 接口統(tǒng)計(jì): 主要被用于SNMP
4. 函數(shù)指針: 包括標(biāo)準(zhǔn)的對(duì)設(shè)備文件操作的函數(shù)指針,如OPEN,IOCTL等
5. 輸出隊(duì)列: mbuf的管理等
以下是ifnet的成員結(jié)構(gòu)說(shuō)明:
struct ifnet *if_next: 因?yàn)閕fnet結(jié)構(gòu)是一個(gè)單向鏈表,所以在結(jié)構(gòu)頭一般都是鏈表的指針,既指向下一ifnet(即下一網(wǎng)絡(luò)適配器的ifnet).
struct ifaddr *if_addrlist: ifaddr數(shù)據(jù)結(jié)構(gòu)是描述該接口的地址,每一個(gè)ifnet都有一個(gè)ifaddr結(jié)構(gòu)鏈表,因?yàn)槲覀冎?一個(gè)網(wǎng)卡他可以支持各種各樣的協(xié)議,如TCP/IP,NETBEUI,APPLETALK等,所以對(duì)ifaddr結(jié)構(gòu)來(lái)說(shuō),他也應(yīng)該是一個(gè)單向鏈表,他的結(jié)構(gòu)如下:
struct ifaddr *ifa_next: 一樣,鏈表的頭一般是下一該結(jié)構(gòu)的指針.
struct ifnet *ifa_ifp:回指針,即指到用該結(jié)構(gòu)的ifnet結(jié)構(gòu).
struct sockaddr *ifa_addr: 指向協(xié)議的接口地址,搞網(wǎng)絡(luò)研究的讀者應(yīng)該很熟悉
struct sockaddr *ifa_dstaddr:對(duì)方的地址(PPP是對(duì)方,以太網(wǎng)是廣播地址)
struct sockaddr *ifa_netmask:這不用我說(shuō)
void (*ifa_rtrequest) ( ): 路由使用
u_short ifa_flags: 路由使用
short ifa_refcnt: 該結(jié)構(gòu)的引用記數(shù)
int ifa_matric: 路由使用
char *if_name: 設(shè)備的名稱,如:ne2000為”ne”,LANCE(AMD公司)為le
short if_unit: 接口號(hào),該類型的卡第一塊為0,第二塊為1等.
u_short if_index: 在內(nèi)核中該設(shè)備的索引號(hào)(唯一值).
short if_flags: 該網(wǎng)卡的狀態(tài)和屬性,讀網(wǎng)卡的狀態(tài)時(shí)使用,如網(wǎng)卡是否正忙?設(shè)置混雜模式,是否使用ARP,支持PPP或BROADCAST等.
short if_timer: 用于定時(shí)接受統(tǒng)計(jì)數(shù)據(jù)
int if_pcount: 用于混雜模式偵聽(tīng)者的數(shù)量
CADdr_t if_bpf: 用于BPF(包過(guò)濾):
struct if_data{ :此結(jié)構(gòu)是通用的接口信息
u_char ifi_type: 硬件類型,如IFT_ETHER代表以太網(wǎng),IFT_FDDI代表光纖網(wǎng)絡(luò).
u_char ifi_physical;以太網(wǎng)的類型(如10base-T,AUI,等等)
u_char ifi_addrlen: 數(shù)據(jù)鏈路地址的長(zhǎng)度,以太網(wǎng)是6
u_char ifi_hdrlen: 硬件首部長(zhǎng)度,以太網(wǎng)的首部是14
u_long ifi_mtu: 最大傳輸單元,以太網(wǎng)是1500
u_long ifi_metric:一般是0,路由使用
u_long ifi_baudrate;連接速度
u_long ifi_ipackets; 接口上接收的包數(shù)
u_long ifi_ierrors; 接收錯(cuò)誤包數(shù)
u_long ifi_opackets; 在接口上發(fā)送的包數(shù)
u_long ifi_oerrors; 在接口上發(fā)送包錯(cuò)的數(shù)
u_long ifi_collisions; 載波幀聽(tīng)的沖突數(shù)
u_long ifi_ibytes; 總共接收的字節(jié)數(shù)
u_long ifi_obytes; 發(fā)送的字節(jié)數(shù)
u_long ifi_imcasts; 接受的多播包數(shù)
u_long ifi_omcasts; 發(fā)送的多播包數(shù)
u_long ifi_iqdrops; 本接口接收失敗的包數(shù)
u_long ifi_noproto; 不被支持協(xié)議的包數(shù)
u_long ifi_hwassist; /* 半波卸載性能 */
u_long ifi_unused; 沒(méi)被使用
struct timeval ifi_lastchange; 最后一次更改的時(shí)間
}

    推薦閱讀