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 } } }