143 详解net_device结构.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
143 详解net_device结构

14.3 詳解net_device結構 初次研究網路驅動程式的讀者可以略過本節,因為就算不了解它,也不會妨礙你的入門學習. 逐一描述每個欄位的意義與用途,參考性質,不需強記. 此結構可分為兩大部分:開放與隱藏. 開放-此結構宣告為靜態結構,可以預先設定初值的欄位. 隱藏-剩餘欄位,主要提供核心內部的網路層使用. 14.3.1 開放欄位(1/2) char name[IFNAMESIZ] 裝置名稱 unsigned long rmem_end; unsigned long rmem_start; unsigned long mem_end; unsigned long mem_start; 裝置的公共記憶體範圍,rmem是接收區的範圍,mem是傳送區的範圍. unsigned long base_addr; 網路卡I/O基底位址 unsigned char irq; 裝置使用的中斷編號 14.3.1 開放欄位(2/2) unsigned char if_port; 若網卡有多個連接埠,此欄代表正在使用的的那個連接埠. unsigned char dma; 分配給網路裝置的DMA通道. unsigned long state; 裝置的狀態,驅程不直接操作這些旗標,而是透過一組工具函式來改變或取得. struct net_device *next; 指向全域鏈結串列裡的下一個裝置,驅程不應該接觸到. int (*init)(struct net_device *dev); 指向初始函式的指標. 14.3.2 隱藏欄位 這些欄位大致可分成三大類: 第一類 提供網路介面資訊(ifconfig). 第二類 輔助驅動程式(核心用不到). 第三類 裝置作業方法,是kernel-driver介面的一部分. 其後說明上述欄位,並非表示在此結構的實際排列順序. 14.3.2.1 界面資訊欄位(1/5) 設定網路介面的資訊性欄位 (driver/net/net_init.c) void ether_setup(struct net_device *dev); void fddi_setup(struct net_device *dev); void hippi_setup(struct net_device *dev); void ltalk_setup(struct net_device *dev); void tr_setup(struct net_device *dev); void fc_setup(struct net_device *dev); 這六類已經涵括所有能夠找到的網路技術,若有更新奇的玩意兒,就只好老老實實自己填寫下面的欄位了. 14.3.2.1 界面資訊欄位(2/5) unsigned short hard_header_len; 硬體標頭長度,計算單位是octet. 對於Ethernet值為14 unsigned mtu; 傳輸單位上限.對於Ethernet值為1500 octets unsigned long tx_queue_len; 傳輸佇列可容納的訊框長度上限. ether_setup()設為100 unsigned short type; 介面硬體型態. 提供ARP判斷介面支援何種硬體位址 14.3.2.1 界面資訊欄位(3/5) unsigned char addr_len; 硬體位址(MAC)長度. unsigned char broadcast[MAX_ADDR_LEN]; 廣播位址. unsigned char dev_addr[MAX_ADDR_LEN]; 硬體位址. 以Ethernet而言,硬體位址長度為6 octets,廣播位址是6個連續0xff, ether_setup()能正確地填寫這兩值,但MAC位址則須靠驅動程式自己填寫. 14.3.2.1 界面資訊欄位(4/5) unsigned short flags; 介面旗標.flags是一個位元遮罩,linux/if.h定義了一系列代表各種位元值的IFF_符號(InterFace Flags),有效的旗標包括: IFF_UP 介面運作狀態.對驅程唯讀,只有核心能變更. IFF_BROADCAST 介面是否具備廣播能力. IFF_DEBUG 除錯模式.驅程用此控制printk的囉唆程度 IFF_LOOPBACK 只有loopback介面才能設立此旗標. IFF_POINTOPOINT 點對點介面. IFF_NOARP 是否支援ARP. 14.3.2.1 界面資訊欄位(5/5)

文档评论(0)

wujianz + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档