WSL2中Mininet配置链路属性时报错“指定qdisc类型未知”求助
问题场景
在WSL2-Ubuntu 20.04环境运行Mininet 2.3.0,配置主机与交换机链路时出现以下报错:
Error: Specified qdisc kind is unknown. Error: RTNETLINK answers: No such file or directory
使用的拓扑代码如下:
class NetworkTopo( Topo ): # Builds network topology def build( self, **_opts ): s1 = self.addSwitch ( 's1', failMode='standalone' ) s2 = self.addSwitch ( 's2', failMode='standalone' ) s3 = self.addSwitch ( 's3', failMode='standalone' ) s4 = self.addSwitch ( 's4', failMode='standalone' ) # Adding hosts d1 = self.addHost( 'd1') d2 = self.addHost( 'd2') d3 = self.addHost( 'd3') # Connecting hosts to switches for d, s in [ (s1, s2), (s1, s3), (d1, s2), (d2, s2), (d3, s3)]: # self.addLink( d, s , bw=5, delay='5ms', max_queue_size=1000, loss=10, use_htb=True) # self.addLink( d, s, cls=TCLink, bw=1) self.addLink( d, s, bw=1, use_htb=True) topo = NetworkTopo() net = Mininet( topo=topo, link=TCLink, controller=None ) net.start()
已尝试重新编译WSL内核、源码安装Mininet,问题仍未解决。
排查与解决步骤
检查WSL2内核HTB支持
执行cat /boot/config-$(uname -r) | grep CONFIG_NET_SCH_HTB,若输出为空或CONFIG_NET_SCH_HTB=n,说明内核未启用HTB队列调度器。重新编译WSL2内核时,需开启CONFIG_NET_SCH_HTB=y和CONFIG_NET_CLS_ACT=y(HTB依赖项),编译完成后替换内核并重启WSL。替换为WSL2支持的队列规则
若内核编译无效,改用WSL2原生支持的队列规则:- 移除链路配置中的
use_htb=True,让Mininet自动适配:self.addLink( d, s, bw=1) - 或显式使用TBF(Token Bucket Filter):
self.addLink( d, s, bw=1, use_tbf=True)
- 移除链路配置中的
验证WSL2模式与重启
执行wsl --set-version Ubuntu-20.04 2确认当前为WSL2模式,然后执行wsl --shutdown关闭所有WSL实例,再重新启动Ubuntu环境。检查tc工具依赖
执行sudo apt install iproute2确保tc工具(Mininet链路控制依赖)已安装,测试tc命令可用性:执行sudo tc qdisc add dev lo root htb,若报错则确认系统不支持HTB,必须换用其他队列规则。
内容的提问来源于stack exchange,提问作者Uakomba Mbasuva

