// 网络设备开启
// 函数主要任务:
// 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 发布
本文详细介绍了网络设备的开启过程,包括设置设备状态、调用驱动程序的open函数、更新多播列表、激活设备等步骤。同时讲解了设备关闭时的流程,如发送关闭消息、停用设备队列、调用驱动的stop函数等。此外,还阐述了网络设备的看门狗功能,用于监测设备传输活动。
摘要由CSDN通过智能技术生成