linux内核中结构net_device的dev_addr和perm_addr有什么区别
What's the difference between dev_addr and perm_addr of the struct net_device in linux kernel
我正在阅读 Linux(版本 3.10)以太网驱动程序的源代码。内核网络中有一个重要的结构net_device。
在“struct net_device”里面,有两个变量命名为dev_addr和perm_addr表示网卡的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,我也在内核文件 net/core/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);
所以这个变量在网卡驱动中很少用到
如果设备分配有永久 MAC 地址,则会填充 perm_addr
字段。这通常来自物理设备上的某些 EEPROM 或其他只读存储器。
dev_addr
字段是当前分配的MAC地址,可以通过软件更改。
我正在阅读 Linux(版本 3.10)以太网驱动程序的源代码。内核网络中有一个重要的结构net_device。
在“struct net_device”里面,有两个变量命名为dev_addr和perm_addr表示网卡的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,我也在内核文件 net/core/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);
所以这个变量在网卡驱动中很少用到
如果设备分配有永久 MAC 地址,则会填充 perm_addr
字段。这通常来自物理设备上的某些 EEPROM 或其他只读存储器。
dev_addr
字段是当前分配的MAC地址,可以通过软件更改。