Bug 859 - [4.19/5.10][x86_64/aarch64]kernelselftest fib_rule_tests.sh测试rule del by pref失败,添加tos 0x10,显示不符合预期
Summary: [4.19/5.10][x86_64/aarch64]kernelselftest fib_rule_tests.sh测试rule del by pref...
Status: RESOLVED FIXED
Alias: None
Product: ANCK 4.19 Dev
Classification: ANCK
Component: general/others (show other bugs) general/others
Version: unspecified
Hardware: All Linux
: P3-Medium S3-normal
Target Milestone: ---
Assignee: XuanZhuo
QA Contact: shuming
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-04-19 15:50 UTC by kangjiangbo
Modified: 2023-05-04 11:06 UTC (History)
5 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description kangjiangbo 2022-04-19 15:50:55 UTC
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
Comment 1 Shiloong admin 2022-04-21 19:19:37 UTC
请问这个用例是第一次跑吗?
如果不是,之前的内核版本测试结果呢?
Comment 2 kangjiangbo 2022-04-22 10:42:57 UTC
(In reply to Shiloong from comment #1)
> 请问这个用例是第一次跑吗?
> 如果不是,之前的内核版本测试结果呢?

不是第一次跑,之前也是失败,但之前以为是另外一个问题,最近仔细分析才发现是个新问题
Comment 3 wangpingping alibaba_cloud_group 2022-11-11 14:06:26 UTC
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
Comment 4 宁畅 alibaba_cloud_group 2023-02-16 14:30:22 UTC
PR: https://gitee.com/src-anolis-os/iproute/pulls/15

rpm 打包的时候为了向后的兼容性,加了一个字符串映射的文件 rt_dsfield,导致输出从对应的十六进制变成字符串解释。所以,这个问题不影响任何功能,而且现在上游社区已经去掉了映射,所以影响了向前兼容。
Comment 5 shanxifanshi alibaba_cloud_group 2023-02-21 11:30:35 UTC
(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
Comment 6 shanxifanshi alibaba_cloud_group 2023-02-21 11:37:37 UTC
(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
Comment 7 wangpingping alibaba_cloud_group 2023-05-04 11:06:39 UTC
(In reply to 宁畅 from comment #4)
> PR: https://gitee.com/src-anolis-os/iproute/pulls/15
> 
> rpm 打包的时候为了向后的兼容性,加了一个字符串映射的文件
> rt_dsfield,导致输出从对应的十六进制变成字符串解释。所以,这个问题不影响任何功能,而且现在上游社区已经去掉了映射,所以影响了向前兼容。

--an7 4.19上面已经评论有同样问题,麻烦将修复同步合入a7分支