我正在阅读Linux(3.10版本)以太网驱动程序的源代码。在内核Netwoking中有一个重要的结构net_device。Linux内核中的struct net_device的dev_addr和perm_addr之间有什么区别
内部 “结构net_device中”,有两个变量命名dev_addr和perm_addr显示NIC的MAC地址。但是,某些供应商驱动程序同时设置了dev_addr和perm_addr,而某些设置只有dev_addr。
虽然在头文件,它是评价为:
unsigned char perm_addr[MAX_ADDR_LEN]; /* permanent hw address */
/* Interface address info used in eth_type_trans() */
unsigned char *dev_addr; /* hw address, (before bcast
because most packets are
unicast) */
尽管如此,我不能让他们之间的区别。
感谢skrrgwasme,也是我在内核文件网/核心/ dev.c reigster_netdev()函数发现:
/* If the device has permanent device address, driver should
* set dev_addr and also addr_assign_type should be set to
* NET_ADDR_PERM (default value).
*/
if (dev->addr_assign_type == NET_ADDR_PERM)
memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
所以这个变量是在网卡驱动程序很少使用。
2015-05-20
Jim Cao