两个基本的数据结构之一:net_device
net_device注册
int register_netdev(struct net_device *dev)
rtnl_lock();
if (strchr(dev->name, '%'))
dev_alloc_name(dev, dev->name);
register_netdevice(dev);
=>int register_netdevice(struct net_device *dev)
//初始化结构体配置
dev->iflink = -1;
if (dev->netdev_ops->ndo_init)
ret = dev->netdev_ops->ndo_init(dev);
ret = dev_get_valid_name(net, dev->name, dev->name, 0);
dev->ifindex = dev_new_index(net);
if (dev->iflink == -1)
dev->iflink = dev->ifindex;
netdev_initialize_kobject(dev);
ret = call_netdevice_notifiers(NETDEV_POST_INIT, dev);
ret = netdev_register_kobject(dev);
dev->reg_state = NETREG_REGISTERED;
//设置初始化状态和队列
set_bit(__LINK_STATE_PRESENT, &dev->state);
dev_init_scheduler(dev);
dev_hold(dev);
list_netdevice(dev);//真正注册,加到3个表里面,一个链表,两个hash表
ret = call_netdevice_notifiers(NETDEV_REGISTER, dev);
rtnl_unlock();
参考文章
网络设备模块初始化(net/core/dev.c/net_dev_init)
https://blog.csdn.net/sun172270102/article/details/80643164
Linux eth0, eth1, ..., eth%d 的生成
https://blog.csdn.net/xiruanliuwei/article/details/78765255