Skip to contentSkip to conversation

Possible bug in tc tool or kernel

DISCUSSION Соловьев Сергей 3 participants 5 messages Mar 17, 2015 – Mar 19, 2015

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

Hi!

I'm sol sorry, but English in not my native language.

After upgrade kernel tc lost some u32 filters

example: where is a "match ip dst 10.10.0.0/24" entries?

[root@sol ~]# tc -b tc.batch
[root@sol ~]# tc filter list dev p10p1
filter parent 1: protocol ip pref 10 u32
filter parent 1: protocol ip pref 10 u32 fh 209: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 208: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 207: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 206: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 205: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 204: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 203: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 202: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 201: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 200: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 100: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 100::800 order 2048 key ht 100 bkt 0 link 200:
match 0a0a0000/ffffff00 at 16

    hash mask 000000ff at 16
filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1
filter parent 1: protocol ip pref 10 u32 fh 800::800 order 2048 key ht 800 bkt 0 link 100:
  match 0a0a0000/ffff0000 at 16
    hash mask 0000ff00 at 16

[root@sol ~]#
[root@sol ~]#
[root@sol ~]# cat tc.batch
qdisc add dev p10p1 root handle 1: htb default fffe
filter add dev p10p1 parent 1:0 protocol ip pref 10 u32
filter add dev p10p1 parent 1:0 protocol ip pref 10 handle 100: u32 divisor 256
filter add dev p10p1 parent 1:0 protocol ip pref 10 u32 ht 800:: match ip dst 10.10.0.0/16 hashkey mask 0x0000ff00 at 16 link 100:
filter add dev p10p1 parent 1:0 protocol ip pref 10 handle 200: u32 divisor 256
filter add dev p10p1 parent 1:0 protocol ip pref 10 u32 ht 100:0: match ip dst 10.10.0.0/24 hashkey mask 0x000000ff at 16 link 200:
filter add dev p10p1 parent 1:0 protocol ip pref 10 handle 201: u32 divisor 256
filter add dev p10p1 parent 1:0 protocol ip pref 10 u32 ht 100:1: match ip dst 10.10.1.0/24 hashkey mask 0x000000ff at 16 link 201:
filter add dev p10p1 parent 1:0 protocol ip pref 10 handle 202: u32 divisor 256
filter add dev p10p1 parent 1:0 protocol ip pref 10 u32 ht 100:2: match ip dst 10.10.2.0/24 hashkey mask 0x000000ff at 16 link 202:
filter add dev p10p1 parent 1:0 protocol ip pref 10 handle 203: u32 divisor 256
filter add dev p10p1 parent 1:0 protocol ip pref 10 u32 ht 100:3: match ip dst 10.10.3.0/24 hashkey mask 0x000000ff at 16 link 203:
filter add dev p10p1 parent 1:0 protocol ip pref 10 handle 204: u32 divisor 256
filter add dev p10p1 parent 1:0 protocol ip pref 10 u32 ht 100:4: match ip dst 10.10.4.0/24 hashkey mask 0x000000ff at 16 link 204:
filter add dev p10p1 parent 1:0 protocol ip pref 10 handle 205: u32 divisor 256
filter add dev p10p1 parent 1:0 protocol ip pref 10 u32 ht 100:5: match ip dst 10.10.5.0/24 hashkey mask 0x000000ff at 16 link 205:
filter add dev p10p1 parent 1:0 protocol ip pref 10 handle 206: u32 divisor 256
filter add dev p10p1 parent 1:0 protocol ip pref 10 u32 ht 100:6: match ip dst 10.10.6.0/24 hashkey mask 0x000000ff at 16 link 206:
filter add dev p10p1 parent 1:0 protocol ip pref 10 handle 207: u32 divisor 256
filter add dev p10p1 parent 1:0 protocol ip pref 10 u32 ht 100:7: match ip dst 10.10.7.0/24 hashkey mask 0x000000ff at 16 link 207:
filter add dev p10p1 parent 1:0 protocol ip pref 10 handle 208: u32 divisor 256
filter add dev p10p1 parent 1:0 protocol ip pref 10 u32 ht 100:8: match ip dst 10.10.8.0/24 hashkey mask 0x000000ff at 16 link 208:
filter add dev p10p1 parent 1:0 protocol ip pref 10 handle 209: u32 divisor 256
filter add dev p10p1 parent 1:0 protocol ip pref 10 u32 ht 100:9: match ip dst 10.10.9.0/24 hashkey mask 0x000000ff at 16 link 209:
[root@sol ~]# uname -a
Linux sol.sol-home.local 3.18.9-200.fc21.x86_64 #1 SMP Mon Mar 9 15:10:50 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux [root@sol ~]#

ruleset in tc.batch autogenerating by this tool http://sourceforge.net/projects/sc-tool/

If i copy-paste pules directly to tc command line, tc accept this line without any error. But rule in tc filter show is absent.

[root@sol ~]# tc filter add dev p10p1 parent 1:0 protocol ip pref 10 u32 ht 100:9: match ip dst 10.10.9.0/24 hashkey mask 0x000000ff at 16 link 209:
[root@sol ~]# echo $?
0
[root@sol ~]# tc filter list dev p10p1
filter parent 1: protocol ip pref 10 u32
filter parent 1: protocol ip pref 10 u32 fh 209: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 208: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 207: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 206: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 205: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 204: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 203: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 202: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 201: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 200: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 100: ht divisor 256
filter parent 1: protocol ip pref 10 u32 fh 100::800 order 2048 key ht 100 bkt 0 link 200:
match 0a0a0000/ffffff00 at 16

    hash mask 000000ff at 16
filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1
filter parent 1: protocol ip pref 10 u32 fh 800::800 order 2048 key ht 800 bkt 0 link 100:
  match 0a0a0000/ffff0000 at 16
    hash mask 0000ff00 at 16

[root@sol ~]#

dmesg is clear.

Hoop to helping, Soloview Sergey.

Acked-by
#1 lore raw
Quoted 8 lines · Соловьев Сергей

Hi!

I'm sol sorry, but English in not my native language.

After upgrade kernel tc lost some u32 filters

example: where is a "match ip dst 10.10.0.0/24" entries?

Can you check if the following commit fixes your problem?

It is already merged in stable kernel, you probably need to wait for a newer Fedora kernel release if it has included it.

commit b057df24a7536cce6c372efe9d0e3d1558afedf4

Author: Ignacy Gawędzki <[email protected]>
Date:   Tue Feb 3 19:05:18 2015 +0100

cls_api.c: Fix dumping of non-existing actions' stats.

In tcf_exts_dump_stats(), ensure that exts->actions is not empty before accessing the first element of that list and calling tcf_action_copy_stats() on it. This fixes some random segvs when adding filters of type
"basic" with
no particular action.

This also fixes the dumping of those "no-action" filters, which more often than not made calls to tcf_action_copy_stats() fail and consequently netlink attributes added by the caller to be removed by a call to nla_nest_cancel().

Fixes 33be62715991 ("net_sched: act: use standard struct list_head")
#2 lore raw
Quoted 31 lines · Cong Wang
Quoted 8 lines · Соловьев Сергей

Hi!

I'm sol sorry, but English in not my native language.

After upgrade kernel tc lost some u32 filters

example: where is a "match ip dst 10.10.0.0/24" entries?

Can you check if the following commit fixes your problem?

It is already merged in stable kernel, you probably need to wait for a newer Fedora kernel release if it has included it.

commit b057df24a7536cce6c372efe9d0e3d1558afedf4

Author: Ignacy Gawędzki <[email protected]>
Date:   Tue Feb 3 19:05:18 2015 +0100

cls_api.c: Fix dumping of non-existing actions' stats.

In tcf_exts_dump_stats(), ensure that exts->actions is not empty before accessing the first element of that list and calling tcf_action_copy_stats() on it. This fixes some random segvs when adding filters of type
"basic" with
no particular action.

This also fixes the dumping of those "no-action" filters, which more often than not made calls to tcf_action_copy_stats() fail and consequently netlink attributes added by the caller to be removed by a call to nla_nest_cancel().

Quoted 8 lines
Fixes 33be62715991 ("net_sched: act: use standard struct list_head")

--
To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

Hi,

I tested on:

	Linux 4.0.0-rc3-ARCH-00130-g4363890 #1 SMP PREEMPT Tue Mar 17 23:11:06 EET 2015 x86_64 GNU/Linux

and got this:

$ tc filter list dev lo
filter parent 1: protocol ip pref 10 u32 
filter parent 1: protocol ip pref 10 u32 fh 209: ht divisor 256 
filter parent 1: protocol ip pref 10 u32 fh 208: ht divisor 256 
filter parent 1: protocol ip pref 10 u32 fh 207: ht divisor 256 
filter parent 1: protocol ip pref 10 u32 fh 206: ht divisor 256 
filter parent 1: protocol ip pref 10 u32 fh 205: ht divisor 256 
filter parent 1: protocol ip pref 10 u32 fh 204: ht divisor 256 
filter parent 1: protocol ip pref 10 u32 fh 203: ht divisor 256 
filter parent 1: protocol ip pref 10 u32 fh 202: ht divisor 256 
filter parent 1: protocol ip pref 10 u32 fh 201: ht divisor 256 
filter parent 1: protocol ip pref 10 u32 fh 200: ht divisor 256 
filter parent 1: protocol ip pref 10 u32 fh 100: ht divisor 256 
filter parent 1: protocol ip pref 10 u32 fh 100::800 order 2048 key ht 100 bkt 0 link 200: 
  match 0a0a0000/ffffff00 at 16
    hash mask 000000ff at 16 
filter parent 1: protocol ip pref 10 u32 fh 100:1:800 order 2048 key ht 100 bkt 1 link 201: 
  match 0a0a0100/ffffff00 at 16
    hash mask 000000ff at 16 
filter parent 1: protocol ip pref 10 u32 fh 100:2:800 order 2048 key ht 100 bkt 2 link 202: 
  match 0a0a0200/ffffff00 at 16
    hash mask 000000ff at 16 
filter parent 1: protocol ip pref 10 u32 fh 100:3:800 order 2048 key ht 100 bkt 3 link 203: 
  match 0a0a0300/ffffff00 at 16
    hash mask 000000ff at 16 
filter parent 1: protocol ip pref 10 u32 fh 100:4:800 order 2048 key ht 100 bkt 4 link 204: 
  match 0a0a0400/ffffff00 at 16
    hash mask 000000ff at 16 
filter parent 1: protocol ip pref 10 u32 fh 100:5:800 order 2048 key ht 100 bkt 5 link 205: 
  match 0a0a0500/ffffff00 at 16
    hash mask 000000ff at 16 
filter parent 1: protocol ip pref 10 u32 fh 100:6:800 order 2048 key ht 100 bkt 6 link 206: 
  match 0a0a0600/ffffff00 at 16
    hash mask 000000ff at 16 
filter parent 1: protocol ip pref 10 u32 fh 100:7:800 order 2048 key ht 100 bkt 7 link 207: 
  match 0a0a0700/ffffff00 at 16
    hash mask 000000ff at 16 
filter parent 1: protocol ip pref 10 u32 fh 100:8:800 order 2048 key ht 100 bkt 8 link 208: 
  match 0a0a0800/ffffff00 at 16
    hash mask 000000ff at 16 
filter parent 1: protocol ip pref 10 u32 fh 100:9:800 order 2048 key ht 100 bkt 9 link 209: 
  match 0a0a0900/ffffff00 at 16
    hash mask 000000ff at 16 
filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1 
filter parent 1: protocol ip pref 10 u32 fh 800::800 order 2048 key ht 800 bkt 0 link 100: 
  match 0a0a0000/ffff0000 at 16
    hash mask 0000ff00 at 16 

Regards,

#3 lore raw
In reply to Cong Wang

17.03.2015 23:42, Cong Wang пишет:

Quoted 30 lines · Соловьев Сергей
Quoted 8 lines

Hi!

I'm sol sorry, but English in not my native language.

After upgrade kernel tc lost some u32 filters

example: where is a "match ip dst 10.10.0.0/24" entries?

Can you check if the following commit fixes your problem?

It is already merged in stable kernel, you probably need to wait for a newer Fedora kernel release if it has included it.

commit b057df24a7536cce6c372efe9d0e3d1558afedf4

Author: Ignacy Gawędzki <[email protected]>
Date:   Tue Feb 3 19:05:18 2015 +0100

cls_api.c: Fix dumping of non-existing actions' stats.

In tcf_exts_dump_stats(), ensure that exts->actions is not empty before accessing the first element of that list and calling tcf_action_copy_stats() on it. This fixes some random segvs when adding filters of type
"basic" with
no particular action.

This also fixes the dumping of those "no-action" filters, which more often than not made calls to tcf_action_copy_stats() fail and consequently netlink attributes added by the caller to be removed by a call to nla_nest_cancel().

Quoted 9 lines
Fixes 33be62715991 ("net_sched: act: use standard struct list_head")

--
To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

Checked. This patch is applied to my kernel and not fixes this problem.

tc as part of iproute2 freshed to latest 3.19.0 version, but nothing...

#4 lore raw
Quoted 5 lines · Соловьев Сергей

Checked. This patch is applied to my kernel and not fixes this problem.

tc as part of iproute2 freshed to latest 3.19.0 version, but nothing...

I got the same result with Vadim, on latest net-next.