天天看点

Linux Kernel TCP/IP Stack — L2 Layer — switchdev L2 Offload

目录

文章目录

  • ​​目录​​
  • ​​switchdev 框架(二层交换 Offload 实现)​​

switchdev 框架(二层交换 Offload 实现)

Linux 4.0 引入了 switchdev 框架,它代表对一类拥有 “交换” 能力芯片的多网口设备的抽象。其中每一个网口就是一个 Port,在 switchdev 框架中被注册成为一个 net_device。

switchdev 起源于 Open vSwitch 项目,由 Jiři Pirko 在 2014 年 9 月首次提出。在 2015 年 2 月的 Netdev 0.1 会议上,网络开发人员决定扩展并采用 switchdev 作为硬件交换机芯片的通用解决方案。

switchdev 驱动模型出现之前,Linux 需要交换机厂商的专门工具套件操作交换机,而在 switchdev 驱动模型之后,通用接口被实现。交换机正式纳入 Linux 网络设备体系,Linux 可以用标准接口实现交换机的控制面和管理面。

在 switchdev 驱动框架下,硬件交换机设备上的每个物理端口都在内核中注册为一个 net_device,就像对现有的网卡设备所做的那样。可以使用现有的指令工具(e.g. brctl、ip 和 iproute2)将端口绑定或桥接、隧道化或划分 VLAN。

switchdev 驱动程序的优点是这样的交换结构可以被卸载到交换机硬件上。因此,驱动程序将 FDB(MAC forwarding database,转发数据库)中的每个条目映射到硬件上,并监视其更改情况。

最初,switchdev 支持的唯一设备是 QEMU 的 Rocker 软件交换机。后来 Mellanox 和 Broadcom 等公司均提供了支持 switchdev 的交换机器。OpenStack Pike 版本中引入了对 switchdev 的支持,实现了 Open vSwitch 硬件卸载(offloading)功能。

继续阅读