網絡子係統4_以太網設備描述符
//分配以太網設備描述符 1.1 struct net_device *alloc_etherdev(int sizeof_priv) { //設備名默認為eth%d,其中%d隨係統中以太網絡設備數遞增 return alloc_netdev(sizeof_priv, "eth%d", ether_setup); } //網絡設備描述符標準分配函數 // alloc_etherdev->alloc_netdev 1.2 struct net_device *alloc_netdev(int sizeof_priv, const char *name, void (*setup)(struct net_device *)) { void *p; struct net_device *dev; int alloc_size; //對齊到32bit alloc_size = (sizeof(*dev) + NETDEV_ALIGN_CONST) & ~NETDEV_ALIGN_CONST; alloc_size += sizeof_priv + NETDEV_ALIGN_CONST; //kmalloc物理內存上連續 p = kmalloc(alloc_size, GFP_KERNEL); if (!p) { printk(KERN_ERR "alloc_dev: Unable to allocate device.\n"); return NULL; } memset(p, 0, alloc_size); dev = (struct net_device *) (((long)p + NETDEV_ALIGN_CONST) & ~NETDEV_ALIGN_CONST); //在padded中保存為對齊dev到32bit浪費的字節數 //dev-padded即可找到kmalloc分配的內存起始地址 dev->padded = (char *)dev - (char *)p; if (sizeof_priv) dev->priv = netdev_priv(dev); //初始化設備的函數指針 setup(dev); strcpy(dev->name, name); return dev; } //以太網設備通用的初始化函數 // 調用路徑:alloc_netdev->ether_setup 1.3 void ether_setup(struct net_device *dev) { dev->change_mtu = eth_change_mtu;//保證ethdev的mtu > 68 && mtu < 1500 dev->hard_header = eth_header;//向skb填以太網報頭 dev->rebuild_header = eth_rebuild_header;//完成arp解析以後,重建以太網報頭 dev->set_mac_address = eth_mac_addr;//設置設備的mac地址 dev->hard_header_cache = eth_header_cache;//根據arp查詢的結果,構造hh_cache,供鄰居子係統使用 dev->header_cache_update= eth_header_cache_update;//更新hh_cache中的以太網頭 dev->hard_header_parse = eth_header_parse;//從skb中取出以太網頭,填充到一個unsigned char*指針中 dev->type = ARPHRD_ETHER;//以太網類型 dev->hard_header_len = ETH_HLEN;//以太網報頭長度 14字節 dev->mtu = 1500; //最大支持的mtu dev->addr_len = ETH_ALEN;//地址長度 6字節 dev->tx_queue_len = 1000; //每個設備的傳輸隊列長度 dev->flags = IFF_BROADCAST|IFF_MULTICAST;//設備默認支持廣播和多播 memset(dev->broadcast,0xFF, ETH_ALEN);//以太網廣播地址FF:FF:FF:FF:FF:FF }
最後更新:2017-04-03 15:21:55
上一篇:
25款很好看的液晶數字字體下載
下一篇:
Java麵向對象高級--接口的基本概念--------interface、implements
Servlet中報Cannot forward after response has been committed錯
歐拉函數性質
IT人的技術哲學書單:誰說寫代碼、做產品就不需要參禪悟道?
[XSS](javascript://sadas/%0aalert`1`)
uva 10125 - Sumsets
億級下ApsaraDB HBase Phoenix秒級內RT在大搜車實踐
8月17日雲棲精選夜讀:用戶體驗再掀高潮,阿裏雲域名領跑用戶體驗
光伏產品出口續增仍要邁坎
Android 修改Bitmap 圖片像素的信息 R G B 顏色值 詳解
Java Reflection(八):注解