網絡子係統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(八):注解