OpenFlow 规则元数据

OpenFlow Rule Metadata

我想了解如何在开放流规则中计算元数据。

cookie=0x6900000,持续时间=228925.519s,table=17,n_packets=384,n_bytes=35436,优先级=10,元数据=0xf30000000000/0xffffff0000000000 动作=write_metadata:0xc000f30000000000/0xfffffffffffffffe,goto_table:211

示例:我有一个与此非常相似的流程。 元数据究竟是如何计算的。

以及如何解释元数据值和掩码

有人说 new_metadata = old_metadata & ~掩码 |值和掩码

老实说我不明白,谁能解释一下

write_metadata 操作中 valuemetadata 字段的用途在 the Open vSwitch documentation:

中进行了解释
write_metadata:value[/mask]
    Updates the metadata field for the flow. If mask is omit‐
    ted, the metadata field is set exactly to value; if  mask
    is  specified,  then  a  1-bit in mask indicates that the
    corresponding bit in the metadata field will be  replaced
    with  the  corresponding  bit  from value. Both value and
    mask are 64-bit values that are decimal by default; use a
    0x prefix to specify them in hexadecimal.

前面的解释确实等同于:

new_metadata = (old_metadata & ~mask) | (value & mask)

换句话说,我们首先擦除在掩码 (old_metadata & ~mask) 中设置为 1 的旧元数据值的位,然后将掩码中也设置为 1 的值的位设置为 1 (| (value & mask)).