有没有办法重置 nftables 集合中的计数器?

有没有办法重置 nftables 集合中的计数器?

我有一张包含一组 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显示所有计数器现在均归零的集合。

相关内容