// 网络设备开启
// 函数主要任务:
// 1.设置dev->state=__LINK_STATE_START
// 2.调用驱动程序的回调函数open
// 3.设置dev->flags |= IFF_UP表示设备开启
// 4.更新多播列表,
// 5.激活设备
// 6.通知监听器,设置dev->flags
// 设备开启之后应该具备的特征:
// 1.dev->state, 表示设备可以进行传输接收
// 2.dev->flags,表示设备已经开启
// 3.设备使用了正确的队列规则
1.1 int dev_open(struct net_device *dev)
{
int ret = 0;
//检查设备是否已经开启
if (dev->flags & IFF_UP)
return 0;
//检查设备是否存在
if (!netif_device_present(dev))
return -ENODEV;
//设置设备可以进行接收
set_bit(__LINK_STATE_START, &dev->state);
if (dev->open) {
//如果驱动程序提供了open函数,则调用
ret = dev->open(dev);
if (ret)
clear_bit(__LINK_STATE_START, &dev->state);
}
if (!ret) {
//设置开启标志
dev->flags |= IFF_UP;
//加载多播地址列表
dev_mc_upload(dev);
//激活设备,使能传输队列
dev_activate(dev);
//向netdev_chain通知有设备开启
notifier_call_chain(&netdev_chain, NETDEV_UP, dev);
}
return ret;
}
// 加载设备多播地址
网络子系统6_设备开启与关闭
最新推荐文章于 2023-06-02 14:05:27 发布