Description of problem: kernelselftest fib_rule_tests.sh测试rule del by pref失败,添加tos 0x10后显示不符合预期 ipv4和ipv6的route rule的设置中,添加tos 0x10规则之后,使用ip -netns testns rule show 命令查看,该规则的名称显示的不准确: 用例预期是tos 0x10 实际是tos lowdelay Version-Release number of selected component (if applicable): 4.19/5.10 x86_64/aarch64都是这样 How reproducible: 下载当前内核 对应的kernel*src.rpm, rpm -ivh kernel*.src.rpm which yum-builddep || yum install -y yum-utils which rpmbuild || yum install -y rpm-build yum-builddep -y $rpmbuild_dir/SPECS/kernel.spec rpmbuild -bp $rpmbuild_dir/SPECS/kernel.spec cd /root/rpmbuild/BUILD/kernel*/linux* make -C tools/testing/selftests cd tools/testing/selftests/net 直接执行sh fib_rule_tests.sh 或者参照下边步骤 Steps to Reproduce: 从脚本fib_rule_tests.sh中提炼出的测试步骤: 以ipv4为例,ipv6类似,可参照附件 IP="ip -netns testns" RTABLE=100 GW_IP4=192.51.100.2 SRC_IP=192.51.100.3 GW_IP6=2001:db8:1::2 SRC_IP6=2001:db8:1::3 DEV_ADDR=192.51.100.1 DEV_ADDR6=2001:db8:1::1 DEV=dummy0 ip netns add testns $IP link set dev lo up $IP link add dummy0 type dummy $IP link set dev dummy0 up $IP address add $DEV_ADDR/24 dev dummy0 $IP -6 address add $DEV_ADDR6/64 dev dummy0 match="tos 0x10" getmatch=$match $IP rule add $match table $RTABLE $IP route get $GW_IP4 $getmatch | grep -q "table $RTABLE" #这一步,grep tos 0x10 失败,实际$IP rule show显示的是tos lowdelay pref=$($IP rule show | grep "$match lookup $TABLE" | cut -d ":" -f 1) $IP rule del pref $pref Actual results: ip -netns testns rule show 0: from all lookup local 32765: from all tos lowdelay lookup 100 32766: from all lookup main 32767: from all lookup default Expected results: # ip -netns testns rule show 0: from all lookup local 32765: from all tos 0x10 lookup 100 32766: from all lookup main 32767: from all lookup default Additional info: 1.tos 0x10外别的规则都可以正常的显示 2.# rpm -qa|grep iproute iproute-tc-5.12.0-4.an8.aarch64 iproute-5.12.0-4.an8.aarch64 使用找到的高版本iproute也是失败: http://www.rpmfind.net/linux/centos/8-stream/BaseOS/aarch64/os/Packages/iproute-5.15.0-4.el8.aarch64.rpm wget http://www.rpmfind.net/linux/centos/8-stream/BaseOS/aarch64/os/Packages/iproute-tc-5.15.0-4.el8.aarch64.rpm
请问这个用例是第一次跑吗? 如果不是,之前的内核版本测试结果呢?
(In reply to Shiloong from comment #1) > 请问这个用例是第一次跑吗? > 如果不是,之前的内核版本测试结果呢? 不是第一次跑,之前也是失败,但之前以为是另外一个问题,最近仔细分析才发现是个新问题
anolis7.9 x86 4.19.91-194.git.02d097c.an7.x86_64内核存在相同问题 # uname -r 4.19.91-194.git.02d097c.an7.x86_64 # cat /etc/os-release NAME="Anolis OS" VERSION="7.9" ID="anolis" ID_LIKE="rhel fedora centos" VERSION_ID="7.9" PRETTY_NAME="Anolis OS 7.9" ANSI_COLOR="0;31" HOME_URL="https://openanolis.cn/" BUG_REPORT_URL="https://bugs.openanolis.cn/" CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7" 失败日志如下: # ./fib_rule_tests.sh ###################################################################### TEST SECTION: IPv4 fib rule ###################################################################### TEST: rule4 check: oif dummy0 [ OK ] TEST: rule4 del by pref: oif dummy0 [ OK ] RTNETLINK answers: No route to host TEST: rule4 check: from 192.51.100.3 iif dummy0 [FAIL] TEST: rule4 del by pref: from 192.51.100.3 iif dummy0 [ OK ] TEST: rule4 check: tos 0x10 [ OK ] Command line is not complete. Try option "help" TEST: rule4 del by pref: tos 0x10 [FAIL] TEST: rule4 check: fwmark 0x64 [ OK ] TEST: rule4 del by pref: fwmark 0x64 [ OK ] TEST: rule4 check: uidrange 100-100 [ OK ] TEST: rule4 del by pref: uidrange 100-100 [ OK ] SKIP: iproute2 iprule too old, missing sport match SKIP: iproute2 iprule too old, missing ipproto match SKIP: iproute2 iprule too old, missing ipproto match ###################################################################### TEST SECTION: IPv6 fib rule ###################################################################### TEST: rule6 check: oif dummy0 [ OK ] TEST: rule6 del by pref: oif dummy0 [ OK ] TEST: rule6 check: from 2001:db8:1::3 iif dummy0 [ OK ] TEST: rule6 del by pref: from 2001:db8:1::3 iif dummy0 [ OK ] TEST: rule6 check: tos 0x10 [ OK ] Command line is not complete. Try option "help" TEST: rule6 del by pref: tos 0x10 [FAIL] TEST: rule6 check: fwmark 0x64 [ OK ] TEST: rule6 del by pref: fwmark 0x64 [ OK ] TEST: rule6 check: uidrange 100-100 [ OK ] TEST: rule6 del by pref: uidrange 100-100 [ OK ] SKIP: iproute2 iprule too old, missing sport match SKIP: iproute2 iprule too old, missing ipproto match SKIP: iproute2 iprule too old, missing ipproto match Tests passed: 17 Tests failed: 3
PR: https://gitee.com/src-anolis-os/iproute/pulls/15 rpm 打包的时候为了向后的兼容性,加了一个字符串映射的文件 rt_dsfield,导致输出从对应的十六进制变成字符串解释。所以,这个问题不影响任何功能,而且现在上游社区已经去掉了映射,所以影响了向前兼容。
(In reply to 宁畅 from comment #4) > PR: https://gitee.com/src-anolis-os/iproute/pulls/15 > > rpm 打包的时候为了向后的兼容性,加了一个字符串映射的文件 > rt_dsfield,导致输出从对应的十六进制变成字符串解释。所以,这个问题不影响任何功能,而且现在上游社区已经去掉了映射,所以影响了向前兼容。 ---- 我在这个任务里把iproute包取出来验证了下,安装后用例是pass的,麻烦更新到正式的repo源中吧 任务链接:https://tone.openanolis.cn/ws/e6fkf2o4/test_result/51303?tab=3 rpm包链接:https://abs.openanolis.cn/download/OpenAnolis/iproute/653d0516f81c6dc018c4073c9d00381f210422cf/iproute-tc-5.15.0-4.0.2.an8.1.x86_64.rpm 测试日志: # rpm -ivh --force iproute-5.15.0-4.0.2.an8.1.x86_64.rpm Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:iproute-5.15.0-4.0.2.an8.1 ################################# [100%] ./fib_rule_tests.sh ###################################################################### TEST SECTION: IPv4 fib rule ###################################################################### TEST: rule4 check: oif dummy0 [ OK ] TEST: rule4 del by pref: oif dummy0 [ OK ] net.ipv4.ip_forward = 1 net.ipv4.conf.dummy0.rp_filter = 0 TEST: rule4 check: from 192.51.100.3 iif dummy0 [ OK ] TEST: rule4 del by pref: from 192.51.100.3 iif dummy0 [ OK ] net.ipv4.ip_forward = 0 TEST: rule4 check: tos 0x10 [ OK ] TEST: rule4 del by pref: tos 0x10 [ OK ] TEST: rule4 check: fwmark 0x64 [ OK ] TEST: rule4 del by pref: fwmark 0x64 [ OK ] TEST: rule4 check: uidrange 100-100 [ OK ] TEST: rule4 del by pref: uidrange 100-100 [ OK ] TEST: rule4 check: sport 666 dport 777 [ OK ] TEST: rule4 del by pref: sport 666 dport 777 [ OK ] TEST: rule4 check: ipproto tcp [ OK ] TEST: rule4 del by pref: ipproto tcp [ OK ] TEST: rule4 check: ipproto icmp [ OK ] TEST: rule4 del by pref: ipproto icmp [ OK ] ###################################################################### TEST SECTION: IPv6 fib rule ###################################################################### TEST: rule6 check: oif dummy0 [ OK ] TEST: rule6 del by pref: oif dummy0 [ OK ] TEST: rule6 check: from 2001:db8:1::3 iif dummy0 [ OK ] TEST: rule6 del by pref: from 2001:db8:1::3 iif dummy0 [ OK ] TEST: rule6 check: tos 0x10 [ OK ] TEST: rule6 del by pref: tos 0x10 [ OK ] TEST: rule6 check: fwmark 0x64 [ OK ] TEST: rule6 del by pref: fwmark 0x64 [ OK ] TEST: rule6 check: uidrange 100-100 [ OK ] TEST: rule6 del by pref: uidrange 100-100 [ OK ] TEST: rule6 check: sport 666 dport 777 [ OK ] TEST: rule6 del by pref: sport 666 dport 777 [ OK ] TEST: rule6 check: ipproto tcp [ OK ] TEST: rule6 del by pref: ipproto tcp [ OK ] TEST: rule6 check: ipproto ipv6-icmp [ OK ] TEST: rule6 del by pref: ipproto ipv6-icmp [ OK ] Tests passed: 32 Tests failed: 0
(In reply to shanxifanshi from comment #5) > (In reply to 宁畅 from comment #4) > > PR: https://gitee.com/src-anolis-os/iproute/pulls/15 > > > > rpm 打包的时候为了向后的兼容性,加了一个字符串映射的文件 > > rt_dsfield,导致输出从对应的十六进制变成字符串解释。所以,这个问题不影响任何功能,而且现在上游社区已经去掉了映射,所以影响了向前兼容。 > > ---- > 我在这个任务里把iproute包取出来验证了下,安装后用例是pass的,麻烦更新到正式的repo源中吧 > > 任务链接:https://tone.openanolis.cn/ws/e6fkf2o4/test_result/51303?tab=3 > rpm包链接:https://abs.openanolis.cn/download/OpenAnolis/iproute/ > 653d0516f81c6dc018c4073c9d00381f210422cf/iproute-tc-5.15.0-4.0.2.an8.1. > x86_64.rpm > > 测试日志: > # rpm -ivh --force iproute-5.15.0-4.0.2.an8.1.x86_64.rpm > Verifying... ################################# > [100%] > Preparing... ################################# > [100%] > Updating / installing... > 1:iproute-5.15.0-4.0.2.an8.1 ################################# > [100%] > > ./fib_rule_tests.sh > > ###################################################################### > TEST SECTION: IPv4 fib rule > ###################################################################### > > TEST: rule4 check: oif dummy0 [ OK ] > > TEST: rule4 del by pref: oif dummy0 [ OK ] > net.ipv4.ip_forward = 1 > net.ipv4.conf.dummy0.rp_filter = 0 > > TEST: rule4 check: from 192.51.100.3 iif dummy0 [ OK ] > > TEST: rule4 del by pref: from 192.51.100.3 iif dummy0 [ OK ] > net.ipv4.ip_forward = 0 > > TEST: rule4 check: tos 0x10 [ OK ] > > TEST: rule4 del by pref: tos 0x10 [ OK ] > > TEST: rule4 check: fwmark 0x64 [ OK ] > > TEST: rule4 del by pref: fwmark 0x64 [ OK ] > > TEST: rule4 check: uidrange 100-100 [ OK ] > > TEST: rule4 del by pref: uidrange 100-100 [ OK ] > > TEST: rule4 check: sport 666 dport 777 [ OK ] > > TEST: rule4 del by pref: sport 666 dport 777 [ OK ] > > TEST: rule4 check: ipproto tcp [ OK ] > > TEST: rule4 del by pref: ipproto tcp [ OK ] > > TEST: rule4 check: ipproto icmp [ OK ] > > TEST: rule4 del by pref: ipproto icmp [ OK ] > > ###################################################################### > TEST SECTION: IPv6 fib rule > ###################################################################### > > TEST: rule6 check: oif dummy0 [ OK ] > > TEST: rule6 del by pref: oif dummy0 [ OK ] > > TEST: rule6 check: from 2001:db8:1::3 iif dummy0 [ OK ] > > TEST: rule6 del by pref: from 2001:db8:1::3 iif dummy0 [ OK ] > > TEST: rule6 check: tos 0x10 [ OK ] > > TEST: rule6 del by pref: tos 0x10 [ OK ] > > TEST: rule6 check: fwmark 0x64 [ OK ] > > TEST: rule6 del by pref: fwmark 0x64 [ OK ] > > TEST: rule6 check: uidrange 100-100 [ OK ] > > TEST: rule6 del by pref: uidrange 100-100 [ OK ] > > TEST: rule6 check: sport 666 dport 777 [ OK ] > > TEST: rule6 del by pref: sport 666 dport 777 [ OK ] > > TEST: rule6 check: ipproto tcp [ OK ] > > TEST: rule6 del by pref: ipproto tcp [ OK ] > > TEST: rule6 check: ipproto ipv6-icmp [ OK ] > > TEST: rule6 del by pref: ipproto ipv6-icmp [ OK ] > > Tests passed: 32 > Tests failed: 0 补充一下测试环境内核信息: # uname -r 5.10.134-580.git.04e328021.an8.x86_64
(In reply to 宁畅 from comment #4) > PR: https://gitee.com/src-anolis-os/iproute/pulls/15 > > rpm 打包的时候为了向后的兼容性,加了一个字符串映射的文件 > rt_dsfield,导致输出从对应的十六进制变成字符串解释。所以,这个问题不影响任何功能,而且现在上游社区已经去掉了映射,所以影响了向前兼容。 --an7 4.19上面已经评论有同样问题,麻烦将修复同步合入a7分支