Re: [PATCH nft] src: support for selectors with different byteorder with interval concatenations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Nov 24, 2022 at 12:46:02PM +0100, Pablo Neira Ayuso wrote:
> Assuming the following interval set with concatenations:
> 
>  set test {
> 	typeof ip saddr . meta mark
> 	flags interval
>  }
> 
> then, the following rule:
> 
>  ip saddr . meta mark @test
> 
> requires bytecode that swaps the byteorder for the meta mark selector in
> case the set contains intervals and concatenations.
> 
>  inet x y
>    [ meta load nfproto => reg 1 ]
>    [ cmp eq reg 1 0x00000002 ]
>    [ payload load 4b @ network header + 12 => reg 1 ]
>    [ meta load mark => reg 9 ]
>    [ byteorder reg 9 = hton(reg 9, 4, 4) ] 	<----- this is required !
>    [ lookup reg 1 set test dreg 0 ]
> 
> This patch updates byteorder_conversion() to add the unary expression
> that introduces the byteorder expression.
> 
> Moreover, store the meta mark range component of the element tuple in
> the set in big endian as it is required for the range comparisons. Undo
> the byteorder swap in the netlink delinearize path to listing the meta
> mark values accordingly.
> 
> Update tests/py to validate that byteorder expression is emitted in the
> bytecode. Update tests/shell to validate insertion and listing of a
> named map declaration.
> 
> A similar commit 806ab081dc9a ("netlink: swap byteorder for
> host-endian concat data") already exists in the tree to handle this for
> strings with prefix (e.g. eth*).
> 
> Signed-off-by: Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx>
> ---

Hi Pablo,

This patch reversed the byte order on output.

Thanks.
Eric.


--->8---


# cat /tmp/foo
table inet foobar {
        set foobar {
                type ipv4_addr . mark
                flags interval
                elements = { 10.10.10.10 . 0x00000100,
                             20.20.20.20 . 0x00000200 }
        }
}

# ./src/nft -f /tmp/foo

# ./src/nft list table inet foobar
table inet foobar {
        set foobar {
                type ipv4_addr . mark
                flags interval
                elements = { 10.10.10.10 . 0x00010000,
                             20.20.20.20 . 0x00020000 }
        }
}

# nft list table inet foobar
table inet foobar {
        set foobar {
                type ipv4_addr . mark
                flags interval
                elements = { 10.10.10.10 . 0x00000100,
                             20.20.20.20 . 0x00000200 }
        }
}




[Index of Archives]     [Netfitler Users]     [Berkeley Packet Filter]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux