+# In apply_blocks the top-level keys are test block names. Each test block
+# always generates two tests: optimized and unoptimized. (Small tests often
+# produce short bytecode that is already optimal, in which case testing the
+# "optimized" version again is a duplicate work. However, it is not clear yet
+# what would be the right way to avoid the duplicate work without creating
+# gaps in the test coverage.) The top-level values are in turn hashes, where
+# the keys have the following meaning:
+#
+# * savefile (mandatory, string): the file in tests/filter/ to use with
+# "filtertest -r", this should not have too many packets
+# * expr (mandatory, string): the filter expression
+# * results (mandatory, array): the list of program filter results to expect
+my %apply_blocks = (
+ pppoed_nullary_on_ctp => {
+ savefile => 'loopback.pcap',
+ expr => 'pppoed',
+ results => [0, 0, 0, 0, 0, 0],
+ },
+ pppoed_nullary_on_pppoed => {
+ savefile => 'pppoe.pcap',
+ expr => 'pppoed',
+ results => [1508],
+ },
+ pppoed_nullary_on_pppoes => {
+ savefile => 'pppoes.pcap',
+ expr => 'pppoed',
+ results => [0, 0],
+ },
+ pppoes_nullary_on_ctp => {
+ savefile => 'loopback.pcap',
+ expr => 'pppoes',
+ results => [0, 0, 0, 0, 0, 0],
+ },
+ pppoes_nullary_on_pppoed => {
+ savefile => 'pppoe.pcap',
+ expr => 'pppoes',
+ results => [0],
+ },
+ pppoes_nullary_on_pppoes => {
+ savefile => 'pppoes.pcap',
+ expr => 'pppoes',
+ results => [2000, 2000],
+ },
+ pppoes_unary_on_ctp => {
+ savefile => 'loopback.pcap',
+ expr => 'pppoes 0x3b',
+ results => [0, 0, 0, 0, 0, 0],
+ },
+ pppoes_unary_on_pppoed => {
+ savefile => 'pppoe.pcap',
+ expr => 'pppoes 0x3b',
+ results => [0],
+ },
+ pppoes_unary_on_pppoes => {
+ savefile => 'pppoes.pcap',
+ expr => 'pppoes 0x3b',
+ results => [0, 2000],
+ },
+ decnet_on_pppoed => {
+ savefile => 'pppoe.pcap',
+ expr => 'decnet',
+ results => [0],
+ },
+ decnet_on_decnet => {
+ savefile => 'decnet.pcap',
+ expr => 'decnet',
+ # This tests EtherType, so every packet matches.
+ results => [65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535],
+ },
+ decnet_src_1_1_on_pppoed => {
+ savefile => 'pppoe.pcap',
+ expr => 'decnet src 1.1',
+ results => [0],
+ },
+ decnet_dst_1_1_on_pppoed => {
+ savefile => 'pppoe.pcap',
+ expr => 'decnet dst 1.1',
+ results => [0],
+ },
+
+ # This tests a DECnet address, which in the current implementation works
+ # for data packets only. The first packet is an Ethernet Endnode Hello
+ # message, so it does not match even though the packet is from node 1.1.
+ decnet_src_1_1_on_decnet => {
+ savefile => 'decnet.pcap',
+ expr => 'decnet src 1.1',
+ results => [0, 65535, 65535, 65535, 65535, 65535, 65535, 65535],
+ },
+ decnet_dst_1_1_on_decnet => {
+ savefile => 'decnet.pcap',
+ expr => 'decnet dst 1.1',
+ results => [0, 65535, 65535, 65535, 65535, 65535, 65535, 65535],
+ },
+ decnet_src_not_1_1_on_decnet => {
+ savefile => 'decnet.pcap',
+ expr => 'decnet src not 1.1',
+ results => [65535, 0, 0, 0, 0, 0, 0, 0],
+ },
+ decnet_dst_not_1_1_on_decnet => {
+ savefile => 'decnet.pcap',
+ expr => 'decnet dst not 1.1',
+ results => [65535, 0, 0, 0, 0, 0, 0, 0],
+ },
+
+ # The first result is correct from a formal point of view, but the actual
+ # reason is the same as above.
+ decnet_src_63_1023_on_decnet => {
+ savefile => 'decnet.pcap',
+ expr => 'decnet src 63.1023',
+ results => [0, 0, 0, 0, 0, 0, 0, 0],
+ },
+ decnet_dst_63_1023_on_decnet => {
+ savefile => 'decnet.pcap',
+ expr => 'decnet dst 63.1023',
+ results => [0, 0, 0, 0, 0, 0, 0, 0],
+ },
+ decnet_src_not_63_1023_on_decnet => {
+ savefile => 'decnet.pcap',
+ expr => 'decnet src not 63.1023',
+ results => [65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535],
+ },
+ decnet_dst_not_63_1023_on_decnet => {
+ savefile => 'decnet.pcap',
+ expr => 'decnet dst not 63.1023',
+ results => [65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535],
+ },
+
+ # The meaning of this expression is NOT the intuitive "any DECnet packets
+ # that do not have the source address set to 1.1", but this is not
+ # specific to DECnet. Let's test it anyway.
+ decnet_src_not_1_1_on_pppoed => {
+ savefile => 'pppoe.pcap',
+ expr => 'decnet src not 1.1',
+ results => [1508],
+ },
+ decnet_dst_not_1_1_on_pppoed => {
+ savefile => 'pppoe.pcap',
+ expr => 'decnet dst not 1.1',
+ results => [1508],
+ },
+ decnet_src_not_63_1023_on_pppoed => {
+ savefile => 'pppoe.pcap',
+ expr => 'decnet src not 63.1023',
+ results => [1508],
+ },
+ decnet_dst_not_63_1023_on_pppoed => {
+ savefile => 'pppoe.pcap',
+ expr => 'decnet dst not 63.1023',
+ results => [1508],
+ },
+
+ decnet_src_63_1023_on_pppoed => {
+ savefile => 'pppoe.pcap',
+ expr => 'decnet src 63.1023',
+ results => [0],
+ },
+ decnet_dst_63_1023_on_pppoed => {
+ savefile => 'pppoe.pcap',
+ expr => 'decnet src 63.1023',
+ results => [0],
+ },
+
+ dpc_eq_1 => {
+ savefile => 'isup_load_generator.pcap',
+ expr => 'dpc == 1',
+ results => [0, 279, 0, 279, 279, 0, 279, 0, 279, 0],
+ },
+ dpc_lt_2 => {
+ savefile => 'isup_load_generator.pcap',
+ expr => 'dpc < 2',
+ results => [0, 279, 0, 279, 279, 0, 279, 0, 279, 0],
+ },
+ dpc_eq_2 => {
+ savefile => 'isup_load_generator.pcap',
+ expr => 'dpc == 2',
+ results => [279, 0, 279, 0, 0, 279, 0, 279, 0, 279],
+ },
+ dpc_gt_2 => {
+ savefile => 'isup_load_generator.pcap',
+ expr => 'dpc > 2',
+ results => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ },
+ dpc_le_2 => {
+ savefile => 'isup_load_generator.pcap',
+ expr => 'dpc <= 2',
+ results => [279, 279, 279, 279, 279, 279, 279, 279, 279, 279],
+ },
+ dpc_ne_0 => {
+ savefile => 'isup_load_generator.pcap',
+ expr => 'dpc != 0',
+ results => [279, 279, 279, 279, 279, 279, 279, 279, 279, 279],
+ },
+ opc_eq_2 => {
+ savefile => 'isup_load_generator.pcap',
+ expr => 'opc == 2',
+ results => [0, 279, 0, 279, 279, 0, 279, 0, 279, 0],
+ },
+ opc_ge_2 => {
+ savefile => 'isup_load_generator.pcap',
+ expr => 'opc >= 2',
+ results => [0, 279, 0, 279, 279, 0, 279, 0, 279, 0],
+ },
+ opc_gt_2 => {
+ savefile => 'isup_load_generator.pcap',
+ expr => 'opc > 2',
+ results => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ },
+ opc_le_2 => {
+ savefile => 'isup_load_generator.pcap',
+ expr => 'opc <= 2',
+ results => [279, 279, 279, 279, 279, 279, 279, 279, 279, 279],
+ },
+ opc_ne_0 => {
+ savefile => 'isup_load_generator.pcap',
+ expr => 'opc != 0',
+ results => [279, 279, 279, 279, 279, 279, 279, 279, 279, 279],
+ },
+ sls_eq_9 => {
+ savefile => 'isup_load_generator.pcap',
+ expr => 'sls == 9',
+ results => [279, 279, 279, 279, 279, 279, 279, 279, 279, 279],
+ },
+ sls_ne_9 => {
+ savefile => 'isup_load_generator.pcap',
+ expr => 'sls != 9',
+ results => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ },
+);
+