我有一张包含一组 ipv4_addr 的表,其中每个元素都有一个计数器。
我想在读取计数的数据包后重置计数器,但据我所知没有办法做到这一点。
集合计数器是否被视为匿名计数器?
谢谢
答案1
此功能于 2023 年 7 月 14 日推出,因此在提出此问题后:它需要nftables1.0.8并且 Linux 内核 >= 6.5:
支持重置集合、映射和元素中的状态表达式,例如计数器:
reset element t m '{ 1.2.3.4 }' reset map ip t m reset set ip t m
请注意,此功能需要 Linux 内核 >= 6.5-rc1。
以下是交互式 shell 中可重现的示例(在内核 6.6 上使用 nftables 1.0.9):
$ unshare -Urnm
# nft add table t
# nft add set t s '{ type ipv4_addr; counter; elements = { 192.0.2.1 counter packets 10 bytes 1000, 198.51.100.2 counter packets 20 bytes 2000, 203.0.113.3 counter packets 30 bytes 3000 } }'
# nft reset element t s '{ 198.51.100.2 }'
table ip t {
set s {
type ipv4_addr
elements = { 198.51.100.2 counter packets 20 bytes 2000 }
}
}
# nft reset set t s
table ip t {
set s {
type ipv4_addr
counter
elements = { 192.0.2.1 counter packets 10 bytes 1000, 198.51.100.2 counter packets 0 bytes 0,
203.0.113.3 counter packets 30 bytes 3000 }
}
}
# nft list set t s
table ip t {
set s {
type ipv4_addr
counter
elements = { 192.0.2.1 counter packets 0 bytes 0, 198.51.100.2 counter packets 0 bytes 0,
203.0.113.3 counter packets 0 bytes 0 }
}
}
#
- 第一个重置(
reset element
)显示并重置元素{ 198.51.100.2 }
, - 第二个重置 (
reset set
) 显示并重置整个集合,其中元素{ 198.51.100.2 }
显示其计数器先前已重置, - 最后
list
显示所有计数器现在均归零的集合。