Blob Blame History Raw
# meta length 1000
ip test-ip4 input
  [ meta load len => reg 1 ]
  [ cmp eq reg 1 0x000003e8 ]

# meta length 22
ip test-ip4 input
  [ meta load len => reg 1 ]
  [ cmp eq reg 1 0x00000016 ]

# meta length != 233
ip test-ip4 input
  [ meta load len => reg 1 ]
  [ cmp neq reg 1 0x000000e9 ]

# meta length 33-45
ip test-ip4 input
  [ meta load len => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ cmp gte reg 1 0x21000000 ]
  [ cmp lte reg 1 0x2d000000 ]

# meta length != 33-45
ip test-ip4 input
  [ meta load len => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ range neq reg 1 0x21000000 0x2d000000 ]

# meta length { 33, 55, 67, 88}
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000021  : 0 [end]	element 00000037  : 0 [end]	element 00000043  : 0 [end]	element 00000058  : 0 [end]
ip test-ip4 input
  [ meta load len => reg 1 ]
  [ lookup reg 1 set __set%d ]

# meta length { 33-55, 67-88}
__set%d test-ip4 7
__set%d test-ip4 0
	element 00000000  : 1 [end]	element 21000000  : 0 [end]	element 38000000  : 1 [end]	element 43000000  : 0 [end]	element 59000000  : 1 [end]
ip test-ip4 input
  [ meta load len => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ lookup reg 1 set __set%d ]

# meta length { 33-55, 56-88, 100-120}
__set%d test-ip4 7
__set%d test-ip4 0
	element 00000000  : 1 [end]	element 21000000  : 0 [end]	element 59000000  : 1 [end]	element 64000000  : 0 [end]	element 79000000  : 1 [end]
ip test-ip4 input
  [ meta load len => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ lookup reg 1 set __set%d ]

# meta length != { 33, 55, 67, 88}
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000021  : 0 [end]	element 00000037  : 0 [end]	element 00000043  : 0 [end]	element 00000058  : 0 [end]
ip test-ip4 input
  [ meta load len => reg 1 ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta protocol { ip, arp, ip6, vlan }
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000008  : 0 [end]	element 00000608  : 0 [end]	element 0000dd86  : 0 [end]	element 00000081  : 0 [end]
ip test-ip4 input
  [ meta load protocol => reg 1 ]
  [ lookup reg 1 set __set%d ]

# meta protocol != {ip, arp, ip6, vlan}
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000008  : 0 [end]	element 00000608  : 0 [end]	element 0000dd86  : 0 [end]	element 00000081  : 0 [end]
ip test-ip4 input
  [ meta load protocol => reg 1 ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta protocol ip
ip test-ip4 input
  [ meta load protocol => reg 1 ]
  [ cmp eq reg 1 0x00000008 ]

# meta protocol != ip
ip test-ip4 input
  [ meta load protocol => reg 1 ]
  [ cmp neq reg 1 0x00000008 ]

# meta l4proto 22
ip test-ip4 input
  [ meta load l4proto => reg 1 ]
  [ cmp eq reg 1 0x00000016 ]

# meta l4proto != 233
ip test-ip4 input
  [ meta load l4proto => reg 1 ]
  [ cmp neq reg 1 0x000000e9 ]

# meta l4proto 33-45
ip test-ip4 input
  [ meta load l4proto => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 2, 1) ]
  [ cmp gte reg 1 0x00000021 ]
  [ cmp lte reg 1 0x0000002d ]

# meta l4proto != 33-45
ip test-ip4 input
  [ meta load l4proto => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 2, 1) ]
  [ range neq reg 1 0x00000021 0x0000002d ]

# meta l4proto { 33, 55, 67, 88}
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000021  : 0 [end]	element 00000037  : 0 [end]	element 00000043  : 0 [end]	element 00000058  : 0 [end]
ip test-ip4 input
  [ meta load l4proto => reg 1 ]
  [ lookup reg 1 set __set%d ]

# meta l4proto != { 33, 55, 67, 88}
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000021  : 0 [end]	element 00000037  : 0 [end]	element 00000043  : 0 [end]	element 00000058  : 0 [end]
ip test-ip4 input
  [ meta load l4proto => reg 1 ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta mark 0x4
ip test-ip4 input
  [ meta load mark => reg 1 ]
  [ cmp eq reg 1 0x00000004 ]

# meta mark 0x32
ip test-ip4 input
  [ meta load mark => reg 1 ]
  [ cmp eq reg 1 0x00000032 ]

# meta mark and 0x03 == 0x01
ip test-ip4 input
  [ meta load mark => reg 1 ]
  [ bitwise reg 1 = (reg=1 & 0x00000003 ) ^ 0x00000000 ]
  [ cmp eq reg 1 0x00000001 ]

# meta mark and 0x03 != 0x01
ip test-ip4 input
  [ meta load mark => reg 1 ]
  [ bitwise reg 1 = (reg=1 & 0x00000003 ) ^ 0x00000000 ]
  [ cmp neq reg 1 0x00000001 ]

# meta mark 0x10
ip test-ip4 input
  [ meta load mark => reg 1 ]
  [ cmp eq reg 1 0x00000010 ]

# meta mark != 0x10
ip test-ip4 input
  [ meta load mark => reg 1 ]
  [ cmp neq reg 1 0x00000010 ]

# meta mark or 0x03 == 0x01
ip test-ip4 input
  [ meta load mark => reg 1 ]
  [ bitwise reg 1 = (reg=1 & 0xfffffffc ) ^ 0x00000003 ]
  [ cmp eq reg 1 0x00000001 ]

# meta mark or 0x03 != 0x01
ip test-ip4 input
  [ meta load mark => reg 1 ]
  [ bitwise reg 1 = (reg=1 & 0xfffffffc ) ^ 0x00000003 ]
  [ cmp neq reg 1 0x00000001 ]

# meta mark xor 0x03 == 0x01
ip test-ip4 input
  [ meta load mark => reg 1 ]
  [ cmp eq reg 1 0x00000002 ]

# meta mark xor 0x03 != 0x01
ip test-ip4 input
  [ meta load mark => reg 1 ]
  [ cmp neq reg 1 0x00000002 ]

# meta iif "lo" accept
ip test-ip4 input
  [ meta load iif => reg 1 ]
  [ cmp eq reg 1 0x00000001 ]
  [ immediate reg 0 accept ]

# meta iif != "lo" accept
ip test-ip4 input
  [ meta load iif => reg 1 ]
  [ cmp neq reg 1 0x00000001 ]
  [ immediate reg 0 accept ]

# meta iifname "dummy0"
ip test-ip4 input
  [ meta load iifname => reg 1 ]
  [ cmp eq reg 1 0x6d6d7564 0x00003079 0x00000000 0x00000000 ]

# meta iifname != "dummy0"
ip test-ip4 input
  [ meta load iifname => reg 1 ]
  [ cmp neq reg 1 0x6d6d7564 0x00003079 0x00000000 0x00000000 ]

# meta iifname {"dummy0", "lo"}
__set%d test-ip4 3
__set%d test-ip4 0
	element 6d6d7564 00003079 00000000 00000000  : 0 [end]	element 00006f6c 00000000 00000000 00000000  : 0 [end]
ip test-ip4 input
  [ meta load iifname => reg 1 ]
  [ lookup reg 1 set __set%d ]

# meta iifname != {"dummy0", "lo"}
__set%d test-ip4 3
__set%d test-ip4 0
	element 6d6d7564 00003079 00000000 00000000  : 0 [end]	element 00006f6c 00000000 00000000 00000000  : 0 [end]
ip test-ip4 input
  [ meta load iifname => reg 1 ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta iifname "dummy*"
ip test-ip4 input
  [ meta load iifname => reg 1 ]
  [ cmp eq reg 1 0x6d6d7564 0x00000079 ]

# meta iifname "dummy\*"
ip test-ip4 input
  [ meta load iifname => reg 1 ]
  [ cmp eq reg 1 0x6d6d7564 0x00002a79 0x00000000 0x00000000 ]

# meta iiftype {ether, ppp, ipip, ipip6, loopback, sit, ipgre}
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000001  : 0 [end]	element 00000200  : 0 [end]	element 00000300  : 0 [end]	element 00000301  : 0 [end]	element 00000304  : 0 [end]	element 00000308  : 0 [end]	element 0000030a  : 0 [end]
ip test-ip4 input
  [ meta load iiftype => reg 1 ]
  [ lookup reg 1 set __set%d ]

# meta iiftype != {ether, ppp, ipip, ipip6, loopback, sit, ipgre}
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000001  : 0 [end]	element 00000200  : 0 [end]	element 00000300  : 0 [end]	element 00000301  : 0 [end]	element 00000304  : 0 [end]	element 00000308  : 0 [end]	element 0000030a  : 0 [end]
ip test-ip4 input
  [ meta load iiftype => reg 1 ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta iiftype != ether
ip test-ip4 input
  [ meta load iiftype => reg 1 ]
  [ cmp neq reg 1 0x00000001 ]

# meta iiftype ether
ip test-ip4 input
  [ meta load iiftype => reg 1 ]
  [ cmp eq reg 1 0x00000001 ]

# meta iiftype != ppp
ip test-ip4 input
  [ meta load iiftype => reg 1 ]
  [ cmp neq reg 1 0x00000200 ]

# meta iiftype ppp
ip test-ip4 input
  [ meta load iiftype => reg 1 ]
  [ cmp eq reg 1 0x00000200 ]

# meta oif "lo" accept
ip test-ip4 input
  [ meta load oif => reg 1 ]
  [ cmp eq reg 1 0x00000001 ]
  [ immediate reg 0 accept ]

# meta oif != "lo" accept
ip test-ip4 input
  [ meta load oif => reg 1 ]
  [ cmp neq reg 1 0x00000001 ]
  [ immediate reg 0 accept ]

# meta oifname "dummy0"
ip test-ip4 input
  [ meta load oifname => reg 1 ]
  [ cmp eq reg 1 0x6d6d7564 0x00003079 0x00000000 0x00000000 ]

# meta oifname != "dummy0"
ip test-ip4 input
  [ meta load oifname => reg 1 ]
  [ cmp neq reg 1 0x6d6d7564 0x00003079 0x00000000 0x00000000 ]

# meta oifname { "dummy0", "lo"}
__set%d test-ip4 3
__set%d test-ip4 0
	element 6d6d7564 00003079 00000000 00000000  : 0 [end]	element 00006f6c 00000000 00000000 00000000  : 0 [end]
ip test-ip4 input
  [ meta load oifname => reg 1 ]
  [ lookup reg 1 set __set%d ]

# meta oifname "dummy*"
ip test-ip4 input
  [ meta load oifname => reg 1 ]
  [ cmp eq reg 1 0x6d6d7564 0x00000079 ]

# meta oifname "dummy\*"
ip test-ip4 input
  [ meta load oifname => reg 1 ]
  [ cmp eq reg 1 0x6d6d7564 0x00002a79 0x00000000 0x00000000 ]

# meta oiftype {ether, ppp, ipip, ipip6, loopback, sit, ipgre}
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000001  : 0 [end]	element 00000200  : 0 [end]	element 00000300  : 0 [end]	element 00000301  : 0 [end]	element 00000304  : 0 [end]	element 00000308  : 0 [end]	element 0000030a  : 0 [end]
ip test-ip4 input
  [ meta load oiftype => reg 1 ]
  [ lookup reg 1 set __set%d ]

# meta oiftype != {ether, ppp, ipip, ipip6, loopback, sit, ipgre}
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000001  : 0 [end]	element 00000200  : 0 [end]	element 00000300  : 0 [end]	element 00000301  : 0 [end]	element 00000304  : 0 [end]	element 00000308  : 0 [end]	element 0000030a  : 0 [end]
ip test-ip4 input
  [ meta load oiftype => reg 1 ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta oiftype != ether
ip test-ip4 input
  [ meta load oiftype => reg 1 ]
  [ cmp neq reg 1 0x00000001 ]

# meta oiftype ether
ip test-ip4 input
  [ meta load oiftype => reg 1 ]
  [ cmp eq reg 1 0x00000001 ]

# meta skuid {"bin", "root", "daemon"} accept
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000001  : 0 [end]	element 00000000  : 0 [end]	element 00000002  : 0 [end]
ip test-ip4 input
  [ meta load skuid => reg 1 ]
  [ lookup reg 1 set __set%d ]
  [ immediate reg 0 accept ]

# meta skuid != {"bin", "root", "daemon"} accept
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000001  : 0 [end]	element 00000000  : 0 [end]	element 00000002  : 0 [end]
ip test-ip4 input
  [ meta load skuid => reg 1 ]
  [ lookup reg 1 set __set%d 0x1 ]
  [ immediate reg 0 accept ]

# meta skuid "root"
ip test-ip4 input
  [ meta load skuid => reg 1 ]
  [ cmp eq reg 1 0x00000000 ]

# meta skuid != "root"
ip test-ip4 input
  [ meta load skuid => reg 1 ]
  [ cmp neq reg 1 0x00000000 ]

# meta skuid lt 3000 accept
ip test-ip4 input
  [ meta load skuid => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ cmp lt reg 1 0xb80b0000 ]
  [ immediate reg 0 accept ]

# meta skuid gt 3000 accept
ip test-ip4 input
  [ meta load skuid => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ cmp gt reg 1 0xb80b0000 ]
  [ immediate reg 0 accept ]

# meta skuid eq 3000 accept
ip test-ip4 input
  [ meta load skuid => reg 1 ]
  [ cmp eq reg 1 0x00000bb8 ]
  [ immediate reg 0 accept ]

# meta skuid 3001-3005 accept
ip test-ip4 input
  [ meta load skuid => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ cmp gte reg 1 0xb90b0000 ]
  [ cmp lte reg 1 0xbd0b0000 ]
  [ immediate reg 0 accept ]

# meta skuid != 2001-2005 accept
ip test-ip4 input
  [ meta load skuid => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ range neq reg 1 0xd1070000 0xd5070000 ]
  [ immediate reg 0 accept ]

# meta skgid {"bin", "root", "daemon"} accept
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000001  : 0 [end]	element 00000000  : 0 [end]	element 00000002  : 0 [end]
ip test-ip4 input
  [ meta load skgid => reg 1 ]
  [ lookup reg 1 set __set%d ]
  [ immediate reg 0 accept ]

# meta skgid != {"bin", "root", "daemon"} accept
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000001  : 0 [end]	element 00000000  : 0 [end]	element 00000002  : 0 [end]
ip test-ip4 input
  [ meta load skgid => reg 1 ]
  [ lookup reg 1 set __set%d 0x1 ]
  [ immediate reg 0 accept ]

# meta skgid "root"
ip test-ip4 input
  [ meta load skgid => reg 1 ]
  [ cmp eq reg 1 0x00000000 ]

# meta skgid != "root"
ip test-ip4 input
  [ meta load skgid => reg 1 ]
  [ cmp neq reg 1 0x00000000 ]

# meta skgid lt 3000 accept
ip test-ip4 input
  [ meta load skgid => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ cmp lt reg 1 0xb80b0000 ]
  [ immediate reg 0 accept ]

# meta skgid gt 3000 accept
ip test-ip4 input
  [ meta load skgid => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ cmp gt reg 1 0xb80b0000 ]
  [ immediate reg 0 accept ]

# meta skgid eq 3000 accept
ip test-ip4 input
  [ meta load skgid => reg 1 ]
  [ cmp eq reg 1 0x00000bb8 ]
  [ immediate reg 0 accept ]

# meta skgid 2001-2005 accept
ip test-ip4 input
  [ meta load skgid => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ cmp gte reg 1 0xd1070000 ]
  [ cmp lte reg 1 0xd5070000 ]
  [ immediate reg 0 accept ]

# meta skgid != 2001-2005 accept
ip test-ip4 input
  [ meta load skgid => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ range neq reg 1 0xd1070000 0xd5070000 ]
  [ immediate reg 0 accept ]

# meta mark set 0xffffffc8 xor 0x16
ip test-ip4 input
  [ immediate reg 1 0xffffffde ]
  [ meta set mark with reg 1 ]

# meta mark set 0x16 and 0x16
ip test-ip4 input
  [ immediate reg 1 0x00000016 ]
  [ meta set mark with reg 1 ]

# meta mark set 0xffffffe9 or 0x16
ip test-ip4 input
  [ immediate reg 1 0xffffffff ]
  [ meta set mark with reg 1 ]

# meta mark set 0xffffffde and 0x16
ip test-ip4 input
  [ immediate reg 1 0x00000016 ]
  [ meta set mark with reg 1 ]

# meta mark set 0xf045ffde or 0x10
ip test-ip4 input
  [ immediate reg 1 0xf045ffde ]
  [ meta set mark with reg 1 ]

# meta mark set 0xffffffde or 0x16
ip test-ip4 input
  [ immediate reg 1 0xffffffde ]
  [ meta set mark with reg 1 ]

# meta mark set 0x32 or 0xfffff
ip test-ip4 input
  [ immediate reg 1 0x000fffff ]
  [ meta set mark with reg 1 ]

# meta mark set 0xfffe xor 0x16
ip test-ip4 input
  [ immediate reg 1 0x0000ffe8 ]
  [ meta set mark with reg 1 ]

# meta iif "lo"
ip test-ip4 input
  [ meta load iif => reg 1 ]
  [ cmp eq reg 1 0x00000001 ]

# meta oif "lo"
ip test-ip4 input
  [ meta load oif => reg 1 ]
  [ cmp eq reg 1 0x00000001 ]

# meta oifname "dummy2" accept
ip test-ip4 input
  [ meta load oifname => reg 1 ]
  [ cmp eq reg 1 0x6d6d7564 0x00003279 0x00000000 0x00000000 ]
  [ immediate reg 0 accept ]

# meta skuid 3000
ip test-ip4 input
  [ meta load skuid => reg 1 ]
  [ cmp eq reg 1 0x00000bb8 ]

# meta skgid 3000
ip test-ip4 input
  [ meta load skgid => reg 1 ]
  [ cmp eq reg 1 0x00000bb8 ]

# meta rtclassid "cosmos"
ip test-ip4 input
  [ meta load rtclassid => reg 1 ]
  [ cmp eq reg 1 0x00000000 ]

# meta pkttype broadcast
ip test-ip4 input
  [ meta load pkttype => reg 1 ]
  [ cmp eq reg 1 0x00000001 ]

# meta pkttype host
ip test-ip4 input
  [ meta load pkttype => reg 1 ]
  [ cmp eq reg 1 0x00000000 ]

# meta pkttype multicast
ip test-ip4 input
  [ meta load pkttype => reg 1 ]
  [ cmp eq reg 1 0x00000002 ]

# meta pkttype != broadcast
ip test-ip4 input
  [ meta load pkttype => reg 1 ]
  [ cmp neq reg 1 0x00000001 ]

# meta pkttype != host
ip test-ip4 input
  [ meta load pkttype => reg 1 ]
  [ cmp neq reg 1 0x00000000 ]

# meta pkttype != multicast
ip test-ip4 input
  [ meta load pkttype => reg 1 ]
  [ cmp neq reg 1 0x00000002 ]

# pkttype { broadcast, multicast} accept
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000001  : 0 [end]	element 00000002  : 0 [end]
ip test-ip4 input
  [ meta load pkttype => reg 1 ]
  [ lookup reg 1 set __set%d ]
  [ immediate reg 0 accept ]

# meta cpu 1
ip test-ip4 input
  [ meta load cpu => reg 1 ]
  [ cmp eq reg 1 0x00000001 ]

# meta cpu != 1
ip test-ip4 input
  [ meta load cpu => reg 1 ]
  [ cmp neq reg 1 0x00000001 ]

# meta cpu 1-3
ip test-ip4 input
  [ meta load cpu => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ cmp gte reg 1 0x01000000 ]
  [ cmp lte reg 1 0x03000000 ]

# meta cpu != 1-2
ip test-ip4 input
  [ meta load cpu => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ range neq reg 1 0x01000000 0x02000000 ]

# meta cpu { 2,3}
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000002  : 0 [end]	element 00000003  : 0 [end]
ip test-ip4 input
  [ meta load cpu => reg 1 ]
  [ lookup reg 1 set __set%d ]

# meta cpu != { 2,3}
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000002  : 0 [end]	element 00000003  : 0 [end]
ip test-ip4 input
  [ meta load cpu => reg 1 ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta cpu { 2-3, 5-7}
__set%d test-ip4 7
__set%d test-ip4 0
	element 00000000  : 1 [end]	element 02000000  : 0 [end]	element 04000000  : 1 [end]	element 05000000  : 0 [end]	element 08000000  : 1 [end]
ip test-ip4 input
  [ meta load cpu => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ lookup reg 1 set __set%d ]

# meta iifgroup 0
ip test-ip4 input
  [ meta load iifgroup => reg 1 ]
  [ cmp eq reg 1 0x00000000 ]

# meta iifgroup != 0
ip test-ip4 input
  [ meta load iifgroup => reg 1 ]
  [ cmp neq reg 1 0x00000000 ]

# meta iifgroup "default"
ip test-ip4 input
  [ meta load iifgroup => reg 1 ]
  [ cmp eq reg 1 0x00000000 ]

# meta iifgroup != "default"
ip test-ip4 input
  [ meta load iifgroup => reg 1 ]
  [ cmp neq reg 1 0x00000000 ]

# meta iifgroup {"default"}
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000000  : 0 [end]
ip test-ip4 input
  [ meta load iifgroup => reg 1 ]
  [ lookup reg 1 set __set%d ]

# meta iifgroup != {"default"}
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000000  : 0 [end]
ip test-ip4 input
  [ meta load iifgroup => reg 1 ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta iifgroup { 11,33}
__set%d test-ip4 3
__set%d test-ip4 0
	element 0000000b  : 0 [end]	element 00000021  : 0 [end]
ip test-ip4 input
  [ meta load iifgroup => reg 1 ]
  [ lookup reg 1 set __set%d ]

# meta oifgroup 0
ip test-ip4 input
  [ meta load oifgroup => reg 1 ]
  [ cmp eq reg 1 0x00000000 ]

# meta oifgroup != 0
ip test-ip4 input
  [ meta load oifgroup => reg 1 ]
  [ cmp neq reg 1 0x00000000 ]

# meta oifgroup "default"
ip test-ip4 input
  [ meta load oifgroup => reg 1 ]
  [ cmp eq reg 1 0x00000000 ]

# meta oifgroup != "default"
ip test-ip4 input
  [ meta load oifgroup => reg 1 ]
  [ cmp neq reg 1 0x00000000 ]

# meta oifgroup { 11,33}
__set%d test-ip4 3
__set%d test-ip4 0
	element 0000000b  : 0 [end]	element 00000021  : 0 [end]
ip test-ip4 input
  [ meta load oifgroup => reg 1 ]
  [ lookup reg 1 set __set%d ]

# meta cgroup 1048577
ip test-ip4 input
  [ meta load cgroup => reg 1 ]
  [ cmp eq reg 1 0x00100001 ]

# meta cgroup != 1048577
ip test-ip4 input
  [ meta load cgroup => reg 1 ]
  [ cmp neq reg 1 0x00100001 ]

# meta cgroup { 1048577, 1048578 }
__set%d test-ip4 3
__set%d test-ip4 0
	element 00100001  : 0 [end]	element 00100002  : 0 [end]
ip test-ip4 input
  [ meta load cgroup => reg 1 ]
  [ lookup reg 1 set __set%d ]

# meta cgroup != { 1048577, 1048578}
__set%d test-ip4 3
__set%d test-ip4 0
	element 00100001  : 0 [end]	element 00100002  : 0 [end]
ip test-ip4 input
  [ meta load cgroup => reg 1 ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta cgroup 1048577-1048578
ip test-ip4 input
  [ meta load cgroup => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ cmp gte reg 1 0x01001000 ]
  [ cmp lte reg 1 0x02001000 ]

# meta cgroup != 1048577-1048578
ip test-ip4 input
  [ meta load cgroup => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ range neq reg 1 0x01001000 0x02001000 ]

# meta iif . meta oif { "lo" . "lo" }
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000001 00000001  : 0 [end]
ip test-ip4 output
  [ meta load iif => reg 1 ]
  [ meta load oif => reg 9 ]
  [ lookup reg 1 set __set%d ]

# meta iif . meta oif . meta mark { "lo" . "lo" . 0x0000000a }
__set%d test-ip4 3
__set%d test-ip4 0
	element 00000001 00000001 0000000a  : 0 [end]
ip test-ip4 output
  [ meta load iif => reg 1 ]
  [ meta load oif => reg 9 ]
  [ meta load mark => reg 10 ]
  [ lookup reg 1 set __set%d ]

# meta iif . meta oif vmap { "lo" . "lo" : drop }
__map%d test-ip4 b
__map%d test-ip4 0
	element 00000001 00000001  : 0 [end]
ip test-ip4 output
  [ meta load iif => reg 1 ]
  [ meta load oif => reg 9 ]
  [ lookup reg 1 set __map%d dreg 0 ]

# meta random eq 1
ip test-ip4 input
  [ meta load prandom => reg 1 ]
  [ cmp eq reg 1 0x01000000 ]

# meta random gt 1000000
ip test-ip4 input
  [ meta load prandom => reg 1 ]
  [ cmp gt reg 1 0x40420f00 ]

# meta priority root
ip test-ip4 input
  [ meta load priority => reg 1 ]
  [ cmp eq reg 1 0xffffffff ]

# meta priority none
netdev test-netdev ingress
  [ meta load priority => reg 1 ]
  [ cmp eq reg 1 0x00000000 ]

# meta priority 1:1234
ip test-ip4 input
  [ meta load priority => reg 1 ]
  [ cmp eq reg 1 0x00011234 ]

# meta priority bcad:dadc
ip test-ip4 input
  [ meta load priority => reg 1 ]
  [ cmp eq reg 1 0xbcaddadc ]

# meta priority aabb:0
ip test-ip4 input
  [ meta load priority => reg 1 ]
  [ cmp eq reg 1 0xaabb0000 ]

# meta priority != bcad:dadc
ip test-ip4 input
  [ meta load priority => reg 1 ]
  [ cmp neq reg 1 0xbcaddadc ]

# meta priority != aabb:0
ip test-ip4 input
  [ meta load priority => reg 1 ]
  [ cmp neq reg 1 0xaabb0000 ]

# meta priority bcad:dada-bcad:dadc
ip test-ip4 input
  [ meta load priority => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ cmp gte reg 1 0xdadaadbc ]
  [ cmp lte reg 1 0xdcdaadbc ]

# meta priority != bcad:dada-bcad:dadc
ip test-ip4 input
  [ meta load priority => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ range neq reg 1 0xdadaadbc 0xdcdaadbc ]

# meta priority {bcad:dada, bcad:dadc, aaaa:bbbb}
__set%d test-ip4 3
__set%d test-ip4 0
	element bcaddada  : 0 [end]	element bcaddadc  : 0 [end]	element aaaabbbb  : 0 [end]
ip test-ip4 input
  [ meta load priority => reg 1 ]
  [ lookup reg 1 set __set%d ]

# meta priority set cafe:beef
ip test-ip4 input
  [ immediate reg 1 0xcafebeef ]
  [ meta set priority with reg 1 ]

# meta priority != {bcad:dada, bcad:dadc, aaaa:bbbb}
__set%d test-ip4 3
__set%d test-ip4 0
	element bcaddada  : 0 [end]	element bcaddadc  : 0 [end]	element aaaabbbb  : 0 [end]
ip test-ip4 input
  [ meta load priority => reg 1 ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta priority 0x87654321
ip test-ip4 input
  [ meta load priority => reg 1 ]
  [ cmp eq reg 1 0x87654321 ]

# meta priority 2271560481
ip test-ip4 input
  [ meta load priority => reg 1 ]
  [ cmp eq reg 1 0x87654321 ]

# meta length { 33-55, 66-88}
__set%d test-ip4 7 size 5
__set%d test-ip4 0
	element 00000000  : 1 [end]	element 21000000  : 0 [end]	element 38000000  : 1 [end]	element 42000000  : 0 [end]	element 59000000  : 1 [end]
ip test-ip4 input 
  [ meta load len => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ lookup reg 1 set __set%d ]

# meta length != { 33-55, 66-88}
__set%d test-ip4 7 size 5
__set%d test-ip4 0
	element 00000000  : 1 [end]	element 21000000  : 0 [end]	element 38000000  : 1 [end]	element 42000000  : 0 [end]	element 59000000  : 1 [end]
ip test-ip4 input 
  [ meta load len => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta l4proto { 33-55, 66-88}
__set%d test-ip4 7 size 5
__set%d test-ip4 0
	element 00000000  : 1 [end]	element 00000021  : 0 [end]	element 00000038  : 1 [end]	element 00000042  : 0 [end]	element 00000059  : 1 [end]
ip test-ip4 input 
  [ meta load l4proto => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 2, 1) ]
  [ lookup reg 1 set __set%d ]

# meta l4proto != { 33-55, 66-88}
__set%d test-ip4 7 size 5
__set%d test-ip4 0
	element 00000000  : 1 [end]	element 00000021  : 0 [end]	element 00000038  : 1 [end]	element 00000042  : 0 [end]	element 00000059  : 1 [end]
ip test-ip4 input 
  [ meta load l4proto => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 2, 1) ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta skuid { 2001-2005, 3001-3005} accept
__set%d test-ip4 7 size 5
__set%d test-ip4 0
	element 00000000  : 1 [end]	element d1070000  : 0 [end]	element d6070000  : 1 [end]	element b90b0000  : 0 [end]	element be0b0000  : 1 [end]
ip test-ip4 input 
  [ meta load skuid => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ lookup reg 1 set __set%d ]
  [ immediate reg 0 accept ]

# meta iifgroup {"default", 11}
__set%d test-ip4 3 size 2
__set%d test-ip4 0
	element 00000000  : 0 [end]	element 0000000b  : 0 [end]
ip test-ip4 input 
  [ meta load iifgroup => reg 1 ]
  [ lookup reg 1 set __set%d ]

# meta iifgroup != {"default", 11}
__set%d test-ip4 3 size 2
__set%d test-ip4 0
	element 00000000  : 0 [end]	element 0000000b  : 0 [end]
ip test-ip4 input 
  [ meta load iifgroup => reg 1 ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta iifgroup {11-33, 44-55}
__set%d test-ip4 7 size 5
__set%d test-ip4 0
	element 00000000  : 1 [end]	element 0b000000  : 0 [end]	element 22000000  : 1 [end]	element 2c000000  : 0 [end]	element 38000000  : 1 [end]
ip test-ip4 input 
  [ meta load iifgroup => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ lookup reg 1 set __set%d ]

# meta iifgroup != { 11,33}
__set%d test-ip4 3 size 2
__set%d test-ip4 0
	element 0000000b  : 0 [end]	element 00000021  : 0 [end]
ip test-ip4 input 
  [ meta load iifgroup => reg 1 ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta iifgroup != {11-33, 44-55}
__set%d test-ip4 7 size 5
__set%d test-ip4 0
	element 00000000  : 1 [end]	element 0b000000  : 0 [end]	element 22000000  : 1 [end]	element 2c000000  : 0 [end]	element 38000000  : 1 [end]
ip test-ip4 input 
  [ meta load iifgroup => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta oifgroup {"default", 11}
__set%d test-ip4 3 size 2
__set%d test-ip4 0
	element 00000000  : 0 [end]	element 0000000b  : 0 [end]
ip test-ip4 input 
  [ meta load oifgroup => reg 1 ]
  [ lookup reg 1 set __set%d ]

# meta oifgroup {11-33, 44-55}
__set%d test-ip4 7 size 5
__set%d test-ip4 0
	element 00000000  : 1 [end]	element 0b000000  : 0 [end]	element 22000000  : 1 [end]	element 2c000000  : 0 [end]	element 38000000  : 1 [end]
ip test-ip4 input 
  [ meta load oifgroup => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ lookup reg 1 set __set%d ]

# meta oifgroup != { 11,33}
__set%d test-ip4 3 size 2
__set%d test-ip4 0
	element 0000000b  : 0 [end]	element 00000021  : 0 [end]
ip test-ip4 input 
  [ meta load oifgroup => reg 1 ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta oifgroup != {11-33, 44-55}
__set%d test-ip4 7 size 5
__set%d test-ip4 0
	element 00000000  : 1 [end]	element 0b000000  : 0 [end]	element 22000000  : 1 [end]	element 2c000000  : 0 [end]	element 38000000  : 1 [end]
ip test-ip4 input 
  [ meta load oifgroup => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta skuid != { 2001-2005, 3001-3005} accept
__set%d test-ip4 7 size 5
__set%d test-ip4 0
	element 00000000  : 1 [end]	element d1070000  : 0 [end]	element d6070000  : 1 [end]	element b90b0000  : 0 [end]	element be0b0000  : 1 [end]
ip test-ip4 input 
  [ meta load skuid => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ lookup reg 1 set __set%d 0x1 ]
  [ immediate reg 0 accept ]

# meta oifgroup != {"default", 11}
__set%d test-ip4 3 size 2
__set%d test-ip4 0
	element 00000000  : 0 [end]	element 0000000b  : 0 [end]
ip test-ip4 input 
  [ meta load oifgroup => reg 1 ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta iif . meta oif { "lo" . "lo" , "dummy0" . "dummy0" }
__set%d test-ip4 3 size 2
__set%d test-ip4 0
	element 00000001 00000001  : 0 [end]	element 00000005 00000005  : 0 [end]
ip test-ip4 input 
  [ meta load iif => reg 1 ]
  [ meta load oif => reg 9 ]
  [ lookup reg 1 set __set%d ]

# meta iif . meta oif . meta mark { "lo" . "lo" . 0x0000000a, "dummy0" . "dummy0" . 0x0000000b }
__set%d test-ip4 3 size 2
__set%d test-ip4 0
	element 00000001 00000001 0000000a  : 0 [end]	element 00000005 00000005 0000000b  : 0 [end]
ip test-ip4 input 
  [ meta load iif => reg 1 ]
  [ meta load oif => reg 9 ]
  [ meta load mark => reg 10 ]
  [ lookup reg 1 set __set%d ]

# meta iif . meta oif vmap { "lo" . "lo" : drop, "dummy0" . "dummy0" : accept }
__map%d test-ip4 b size 2
__map%d test-ip4 0
	element 00000001 00000001  : 0 [end]	element 00000005 00000005  : 0 [end]
ip test-ip4 input 
  [ meta load iif => reg 1 ]
  [ meta load oif => reg 9 ]
  [ lookup reg 1 set __map%d dreg 0 ]

# meta skgid { 2001-2005} accept
__set%d test-ip4 7 size 3
__set%d test-ip4 0
	element 00000000  : 1 [end]	element d1070000  : 0 [end]	element d6070000  : 1 [end]
ip test-ip4 input 
  [ meta load skgid => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ lookup reg 1 set __set%d ]
  [ immediate reg 0 accept ]

# meta skgid != { 2001-2005} accept
__set%d test-ip4 7 size 3
__set%d test-ip4 0
	element 00000000  : 1 [end]	element d1070000  : 0 [end]	element d6070000  : 1 [end]
ip test-ip4 input 
  [ meta load skgid => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ lookup reg 1 set __set%d 0x1 ]
  [ immediate reg 0 accept ]

# meta cgroup {1048577-1048578}
__set%d test-ip4 7 size 3
__set%d test-ip4 0
	element 00000000  : 1 [end]	element 01001000  : 0 [end]	element 03001000  : 1 [end]
ip test-ip4 input 
  [ meta load cgroup => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ lookup reg 1 set __set%d ]

# meta cgroup != { 1048577-1048578}
__set%d test-ip4 7 size 3
__set%d test-ip4 0
	element 00000000  : 1 [end]	element 01001000  : 0 [end]	element 03001000  : 1 [end]
ip test-ip4 input 
  [ meta load cgroup => reg 1 ]
  [ byteorder reg 1 = hton(reg 1, 4, 4) ]
  [ lookup reg 1 set __set%d 0x1 ]

# meta time "1970-05-23 21:07:14" drop
ip meta-test input
  [ meta load time => reg 1 ]
  [ cmp eq reg 1 0x43f05400 0x002bd503 ]
  [ immediate reg 0 drop ]

# meta time 12341234 drop
ip meta-test input
  [ meta load time => reg 1 ]
  [ cmp eq reg 1 0x74a8f400 0x002bd849 ]
  [ immediate reg 0 drop ]

# meta time "2019-06-21 17:00:00" drop
ip meta-test input
  [ meta load time => reg 1 ]
  [ cmp eq reg 1 0x767d6000 0x15aa3ebc ]
  [ immediate reg 0 drop ]

# meta time "2019-07-01 00:00:00" drop
ip meta-test input
  [ meta load time => reg 1 ]
  [ cmp eq reg 1 0xe750c000 0x15ad18e0 ]
  [ immediate reg 0 drop ]

# meta time "2019-07-01 00:01:00" drop
ip meta-test input
  [ meta load time => reg 1 ]
  [ cmp eq reg 1 0xdf981800 0x15ad18ee ]
  [ immediate reg 0 drop ]

# meta time "2019-07-01 00:00:01" drop
ip meta-test input
  [ meta load time => reg 1 ]
  [ cmp eq reg 1 0x22eb8a00 0x15ad18e1 ]
  [ immediate reg 0 drop ]

# meta day "Saturday" drop
ip test-ip4 input
  [ meta load day => reg 1 ]
  [ cmp eq reg 1 0x00000006 ]
  [ immediate reg 0 drop ]

# meta day 6 drop
ip test-ip4 input
  [ meta load day => reg 1 ]
  [ cmp eq reg 1 0x00000006 ]
  [ immediate reg 0 drop ]

# meta hour "17:00" drop
ip test-ip4 input
  [ meta load hour => reg 1 ]
  [ cmp eq reg 1 0x0000d2f0 ]
  [ immediate reg 0 drop ]

# meta hour "17:00:00" drop
ip test-ip4 input
  [ meta load hour => reg 1 ]
  [ cmp eq reg 1 0x0000d2f0 ]
  [ immediate reg 0 drop ]

# meta hour "17:00:01" drop
ip meta-test input
  [ meta load hour => reg 1 ]
  [ cmp eq reg 1 0x0000d2f1 ]
  [ immediate reg 0 drop ]

# meta hour "00:00" drop
ip meta-test input
  [ meta load hour => reg 1 ]
  [ cmp eq reg 1 0x00013560 ]
  [ immediate reg 0 drop ]

# meta hour "00:01" drop
ip meta-test input
  [ meta load hour => reg 1 ]
  [ cmp eq reg 1 0x0001359c ]
  [ immediate reg 0 drop ]