在 Linux 系统中,网络接口(如 eth0
、wlan0
等)是计算机与外部网络通信的桥梁。无论是物理网卡还是虚拟网络接口,它们的创建和管理都依赖于 Linux 内核的复杂机制。本文将深入探讨 Linux 内核中网络接口的创建过程、命名规则、路由选择以及内核如何将网络接口映射到实际的硬件设备。
1. 网络接口的创建与初始化
在 Linux 内核中,网络接口的创建和初始化主要由设备驱动程序完成。以下是网络接口创建的关键步骤:
1.1 定义和初始化 net_device
结构体
net_device
是内核中表示网络设备的核心数据结构。驱动程序通过 alloc_etherdev
或 alloc_netdev
函数分配并初始化 net_device
结构体。
struct net_device *ndev; ndev = alloc_etherdev(sizeof(struct priv_data)); if (!ndev) { pr_err("alloc_etherdev failed\n"); return -ENOMEM; }
alloc_etherdev
函数不仅分配了 net_device
结构体,还为其分配了私有数据空间(如 struct pr