linux内核版本支持的功能
在2015年,TC的Classifier-Action子系统增加了对OpenFlow的支持[3],所有的OpenFlow规则都可以映射成TC规则。随后不久,OpenFlow Classifier又被改名为Flower Classifier。这就是TC Flower的来源。
Linux TC Flower hardware offload
在2011年,Linux内核增加了基于硬件QoS的支持[4]。因为TC就是Linux内实现QoS的模块,也就是说Linux增加了TC的硬件卸载功能。在2016年,Linux内核又增加了对TC Classifier硬件卸载的支持linux内核,但是这个时候只支持了u32类型的Classifier(与TC Flower并列的,但是历史更悠久的一种Classifier)。在4.9~4.14内核,Linux终于增加了对TC Flower硬件卸载的支持。也就是说OpenFlow规则有可能通过TC Flower的硬件卸载能力,在硬件(主要是网卡)中完成转发。
TC Flower硬件卸载的工作原理比较简单。当一条TC Flower规则被添加时linux 查看内核版本红帽子linux下载,Linux TC会检查这条规则的挂载网卡是否支持并打开了NETIF_F_HW_TC标志位linux 查看内核版本,并且是否实现了ndo_steup_tc(TC硬件卸载的挂载点)。如果都满足的话,这条TC Flower规则会传给网卡的ndo_steup_tc函数,进而下载到网卡内部[5]。
如何知道我自己的linux 内核
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-1160.49.1.el7.x86_64 #1 SMP Tue Nov 30 15:51:32 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
3.10.0-1160 是否支持TC Flower 这个需要怎么查看呢
配置tc命令看是否支持,能配置成功
tc filter add dev ens4f0_0 protocol ip parent ffff:
flower
skip_sw
dst_mac e4:11:22:11:4a:51
src_mac e4:11:22:11:4a:50
action drop
tc -s filter show dev ens4f0_0 root | grep --color -E 'in_hw|'