网络设备模块初始化(net_dev_init)

net_dev_init《net/core/dev.c》
dev_proc_init	
//proc/net/dev  可以显示网络接口的一些收发包信息
//proc/net/softnet_stat 显示每个CPU处理接收包的统计信息

netdev_sysfs_init
//sys/class/net/xxx/*** 显示了各种设备的一些属性信息,比如IP、掩码、是否有载波等

INIT_LIST_HEAD(&ptype_all)
//处理所有包类型列表初始化(如PF_PACKT协议族)。

INIT_LIST_HEAD(&ptype_base[i])
//基本包类型列表初始化,这时基本包类型是指二层链路上的负载类型,比如IP、VLAN等。

INIT_HLIST_HEAD(&dev_name_head[i])
//基于名称的设备HASH列表

INIT_HLIST_HEAD(&dev_name_head[i])
//基于设备ID的设备HASH列表

queue = &per_cpu(softnet_data, i);
//每CPU的软中断处理数据

skb_queue_head_init(&queue->input_pkt_queue);
queue->completion_queue = NULL;
INIT_LIST_HEAD(&queue->poll_list);
set_bit(__LINK_STATE_START, &queue->backlog_dev.state);
queue->backlog_dev.weight = weight_p;
queue->backlog_dev.poll = process_backlog;
atomic_set(&queue->backlog_dev.refcnt, 1);
//初始化收包工作所需要的列表等参数
//这里input_pkg_queue及虚拟设备backlog_dev仅用于不支持NAPI接收模式的设备驱动使用

netdev_dma_register
//用于使用DMA的设备,未分析

open_softirq(NET_TX_SOFTIRQ, net_tx_action, NULL);
open_softirq(NET_RX_SOFTIRQ, net_rx_action, NULL);
//注册接收、发送的软中断

hotcpu_notifier(dev_cpu_callback, 0);
//向支持热拔插类型的CPU注册CPU改变通知链,当CPU被移除时,将被移除的CPU上
//待处理的收发包队列转移到当前正在使用的CPU上工作。

dst_init()
  register_netdevice_notifier(&dst_dev_notifier);
  //注册了网络设备的通知链,后续当网络设备DOWN(如ifdown命令)掉时,会遍历
  //dst_garbage_list列表,则列表中所有dst_entry条目的input、output回调分别设置为
  //dst_discard_in和dst_discard_out来进行丢包处理。
  
dev_mcast_init
//proc/net/dev_mcast	可以显示所有设备的组播地址列表

你可能感兴趣的:(网络设备模块初始化(net_dev_init))