]> The Tcpdump Group git mirrors - libpcap/blob - testprogs/TESTrun
TESTrun: Add more reject tests with pcap_ether_hostton().
[libpcap] / testprogs / TESTrun
1 #!/usr/bin/env perl
2
3 # Copyright (c) 2024 The Tcpdump Group
4 # All rights reserved.
5 # SPDX-License-Identifier: BSD-2-Clause
6 #
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions
9 # are met:
10 # 1. Redistributions of source code must retain the above copyright
11 # notice, this list of conditions and the following disclaimer.
12 # 2. Redistributions in binary form must reproduce the above copyright
13 # notice, this list of conditions and the following disclaimer in the
14 # documentation and/or other materials provided with the distribution.
15 #
16 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
19 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
20 # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
22 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 # POSSIBILITY OF SUCH DAMAGE.
28
29 require 5.8.4; # Solaris 10
30 use sigtrap qw(die normal-signals);
31 use strict;
32 use warnings FATAL => qw(uninitialized);
33 use Getopt::Long;
34 use Time::HiRes;
35 use Config;
36 use FindBin;
37 require $FindBin::RealBin . '/TEST' . ($Config{useithreads} ? 'mt' : 'st') . '.pm';
38 require $FindBin::RealBin . '/TESTlib.pm';
39 # TESTlib.pm
40 use subs qw(
41 file_get_contents
42 file_put_contents
43 get_diff_flags
44 init_tmpdir
45 mytmpfile
46 read_config_h
47 result_failed
48 result_passed
49 result_skipped
50 result_timed_out
51 run_skip_test
52 skip_config_def1
53 skip_config_have_decl
54 skip_config_undef
55 skip_os
56 skip_os_not
57 string_in_file
58 test_and_report
59 );
60
61 use constant SAVEFILE_DIR => $FindBin::RealBin . '/../tests/filter/';
62 my $filename_expected = 'expected.txt';
63 my $filename_stdout = 'stdout.txt';
64 my $filename_filter = 'filter.txt';
65 my $filename_diags = 'diags.txt';
66
67 # See RFC 6761 Section 6.4.
68 my $nonexistent = 'host.invalid';
69
70 use constant {
71 EX_OK => 0,
72 # On all platforms where timeout(1) is available it exits with status 124
73 # if the command timed out.
74 TIMED_OUT => 124,
75 EX_USAGE => 64,
76 # In this libpcap version filtertest exits with EX_DATAERR if the user input
77 # is invalid and with other status codes for other (memory/file/etc) error
78 # conditions.
79 EX_DATAERR => 65,
80 };
81
82 # Set these later only if running any tests.
83 my $diff_flags;
84 my $timeout_bin;
85 my $test_timeout;
86 my $filtertest;
87
88 sub usage_text {
89 my $detailed = shift;
90 my $myname = $FindBin::Script;
91
92 my $ret = "Usage: ${myname} [--passed] [--skipped]
93 (run all tests)
94 or: ${myname} --list
95 (print all test labels)
96 or: ${myname} --one <test_label>
97 (run one test only and print the details)
98 or: ${myname} --config
99 (print the parsed contents of config.h)
100 or: ${myname} --help
101 (print the detailed help screen)
102
103 Options:
104 --passed print the passed tests details
105 --skipped print the skipped tests details
106 ";
107 return $ret unless $detailed;
108 $ret .= "
109 Set FILTERTEST_TIMEOUT to 0 to disable the timeout completely or to any other
110 value to override the default timeout. The timeout applies to every test.
111 If TIMEOUT_BIN is not set, the timeout applies iff the default \"timeout\"
112 binary works. If it is set (on macOS there is no default \"timeout\" and the
113 binary from GNU coreutils package may be available as \"gtimeout\" only), the
114 custom binary must work.
115
116 FILTERTEST_BIN and CONFIG_H allow to specify custom paths to respective files
117 if the current working directory is not the directory where the build output
118 files go to. Otherwise by default this script finds the files for both
119 Autoconf and CMake, both in-tree and out-of-tree builds.
120
121 TIMEOUT_BIN allows to specify the path to a timeout(1) binary.
122
123 TESTRUN_JOBS allows to specify the number of tester threads (1 by default).
124
125 TESTRUN_SHORT=1 generates a shorter list of tests (not recommended unless the
126 host is very slow and time is a factor).
127 ";
128 return $ret;
129 }
130
131 my $config_h = defined $ENV{CONFIG_H} ? $ENV{CONFIG_H} : './config.h';
132 my $only_one = undef;
133 my $only_list = 0;
134 my $print_passed = 0;
135 my $print_skipped = 0;
136 my $only_short = defined $ENV{TESTRUN_SHORT} ? $ENV{TESTRUN_SHORT} : 0;
137 if (! GetOptions (
138 'one=s' => \$only_one,
139 'list' => \$only_list,
140 'passed' => \$print_passed,
141 'skipped' => \$print_skipped,
142 'config' => sub {
143 my %config = read_config_h $config_h;
144 printf "%-50s %s\n", $_, $config{$_} foreach sort keys %config;
145 exit EX_OK;
146 },
147 'help' => sub {print STDOUT usage_text 1; exit EX_OK;},
148 )) {
149 print STDERR usage_text 0;
150 exit EX_USAGE;
151 };
152 $print_passed = $print_skipped = 1 if $only_one;
153
154 # Initialize now so that the skip functions in TESTlib.pm (and therefore the
155 # test declarations below) work as intended.
156 read_config_h ($config_h);
157
158 # All accept tests require that BDEBUG is not set.
159 die 'ERROR: This script is not compatible with optimizer debugging.' if skip_config_def1 'BDEBUG';
160
161 # Skip unless the file exists and is readable and contains every given line
162 # (less any duplicates) at least once in any order.
163 sub skip_unless_file_contains_lines {
164 my $filename = shift;
165 my %notfound = map {$_ => 1} @_;
166 # In Perl 5.8.4 "s///" does not have the "r" option.
167 my $basename = $filename;
168 $basename =~ s|^.*[/\\]||o;
169 my $skip = "configure the $basename file";
170
171 open FH, '<', $filename or return $skip;
172 while (<FH>) {
173 s/[\r\n]*$//o; # chomp() removes LF, but not CR, even on Windows.
174 next unless exists $notfound{$_};
175 delete $notfound{$_};
176 last unless scalar keys %notfound;
177 }
178 close FH or die "failed closing '$filename'";
179 return scalar (keys %notfound) ? $skip : '';
180 }
181
182 # Skip if running on Linux with musl libc.
183 sub skip_musl_libc {
184 return skip_os ('linux') &&
185 skip_config_undef ('HAVE_GLIBC') &&
186 skip_config_undef ('HAVE_UCLIBC') &&
187 'musl libc';
188 }
189
190 # libpcap.test is a domain subject to RFC 6761 Section 6.2.
191 #
192 # Each of the seven hostnames under host123.libpcap.test has 1..3 addresses
193 # (at most one of {Ethernet, IPv4, IPv6} each, at least one in total):
194 # * eth-ipv4-ipv6.host123.libpcap.test
195 # * eth-ipv4-noipv6.host123.libpcap.test
196 # * eth-noipv4-ipv6.host123.libpcap.test
197 # * eth-noipv4-noipv6.host123.libpcap.test
198 # * noeth-ipv4-ipv6.host123.libpcap.test
199 # * noeth-ipv4-noipv6.host123.libpcap.test
200 # * noeth-noipv4-ipv6.host123.libpcap.test
201 #
202 # To add tests that require hostnames with a different arrangement of
203 # addresses, consider adding similar mnemonic domains.
204
205 # The MAC address is in the locally-administered DECnet OUI space.
206 # These 4 lines can be copied into ethers(5) directly:
207 my @ethers_lines = split /\n/, <<EOF;
208 aa:00:04:00:14:0e eth-noipv4-noipv6.host123.libpcap.test
209 aa:00:04:00:14:0e eth-noipv4-ipv6.host123.libpcap.test
210 aa:00:04:00:14:0e eth-ipv4-noipv6.host123.libpcap.test
211 aa:00:04:00:14:0e eth-ipv4-ipv6.host123.libpcap.test
212 EOF
213
214 # The IPv6 address is subject to RFC4193.
215 # These 8 lines can be copied into hosts(5) directly:
216 my @hosts_lines = split /\n/, <<EOF;
217 10.20.30.40 noeth-ipv4-noipv6.host123.libpcap.test
218 10.20.30.40 noeth-ipv4-ipv6.host123.libpcap.test
219 10.20.30.40 eth-ipv4-noipv6.host123.libpcap.test
220 10.20.30.40 eth-ipv4-ipv6.host123.libpcap.test
221 fd00:a1b2:c3d4::1020:3040:5060:7080 noeth-noipv4-ipv6.host123.libpcap.test
222 fd00:a1b2:c3d4::1020:3040:5060:7080 noeth-ipv4-ipv6.host123.libpcap.test
223 fd00:a1b2:c3d4::1020:3040:5060:7080 eth-noipv4-ipv6.host123.libpcap.test
224 fd00:a1b2:c3d4::1020:3040:5060:7080 eth-ipv4-ipv6.host123.libpcap.test
225 EOF
226
227 # Dotted-quad is the only portable syntax common to all implementations of
228 # getnetbyname().
229 # These 3 lines can be copied into networks(5) directly (except on OpenBSD):
230 my @networks_lines = split /\n/, <<EOF;
231 net-10-0-0-0.libpcap.test 10.0.0.0
232 net-10-20-0-0.libpcap.test 10.20.0.0
233 net-10-20-30-0.libpcap.test 10.20.30.0
234 EOF
235 # These 3 lines can be copied into hosts(5) directly (on OpenBSD only):
236 my @networks_lines_swapped = split /\n/, <<EOF;
237 10.0.0.0 net-10-0-0-0.libpcap.test
238 10.20.0.0 net-10-20-0-0.libpcap.test
239 10.20.30.0 net-10-20-30-0.libpcap.test
240 EOF
241
242 # Skip if /etc/ethers (or the equivalent) has not been configured for tests.
243 #
244 # Do not use getent(1): it works, but experiences some portability issues and
245 # does not always test the same code paths as what libpcap uses.
246 my $cached_skip_no_ethers;
247 sub skip_no_ethers {
248 $cached_skip_no_ethers =
249 # pcap_ether_hostton() currently cannot guess a suitable
250 # location for the libpcap-only ethers(5).
251 skip_os ('msys') ||
252 skip_unless_file_contains_lines (
253 $^O eq 'haiku' ? '/boot/system/settings/network/ethers' :
254 '/etc/ethers',
255 @ethers_lines
256 ) unless defined $cached_skip_no_ethers;
257 return $cached_skip_no_ethers;
258 }
259
260 # Same as the above, plus require the platform to treat hostnames in
261 # ethers(5) correctly (case-insensitive).
262 sub skip_no_ethers_casecmp {
263 return skip_no_ethers ||
264 # pcap_ether_hostton() uses strcmp().
265 skip_musl_libc ||
266 skip_os ('haiku') ||
267 # On illumos and possibly Solaris 11.4 ether_hostton() initially
268 # fails to find any upper-case hostnames, then after a few minutes
269 # it finds some or all of them, or sometimes it does not.
270 skip_os ('solaris') ||
271 # ether_hostton() uses strcmp().
272 skip_os ('freebsd') ||
273 skip_os ('netbsd') ||
274 skip_os ('openbsd');
275 }
276
277 # Skip if /etc/hosts (or the equivalent) has not been configured for tests.
278 #
279 # Do not use getent(1): it experiences too many portability issues (especially
280 # with dual-stack hostnames) to be practicable.
281 my $cached_skip_no_hosts;
282 sub skip_no_hosts {
283 return '%SYSTEMROOT% not set' if $^O eq 'msys' && ! defined $ENV{SYSTEMROOT};
284 $cached_skip_no_hosts = skip_unless_file_contains_lines (
285 $^O eq 'haiku' ? '/boot/system/settings/network/hosts' :
286 $^O eq 'solaris' ? '/etc/inet/hosts' :
287 $^O eq 'msys' ? "${ENV{SYSTEMROOT}}\\system32\\drivers\\etc\\hosts" :
288 '/etc/hosts',
289 @hosts_lines
290 ) unless defined $cached_skip_no_hosts;
291 return $cached_skip_no_hosts;
292 }
293
294 # Same as the above, plus require the platform to treat hostnames in
295 # hosts(5) correctly (case-insensitive).
296 sub skip_no_hosts_casecmp {
297 return skip_no_hosts ||
298 # getaddrinfo() uses strcmp() on /etc/hosts.
299 skip_musl_libc();
300 }
301
302 # Skip if /etc/networks (or the equivalent) has not been configured for tests.
303 my $cached_skip_no_networks;
304 sub skip_no_networks {
305 $cached_skip_no_networks =
306 # Does not implement getnetbyname().
307 skip_os ('msys') ||
308 # getnetbyname() is a no-op.
309 skip_musl_libc() ||
310 skip_unless_file_contains_lines (
311 $^O eq 'solaris' ? '/etc/inet/networks' :
312 $^O eq 'haiku' ? '/etc/networks' : # May change, see haiku bug report 19432.
313 $^O eq 'openbsd' ? '/etc/hosts' : # (sic)
314 '/etc/networks',
315 $^O eq 'openbsd' ? @networks_lines_swapped : @networks_lines
316 ) unless defined $cached_skip_no_networks;
317 return $cached_skip_no_networks;
318 }
319
320 sub skip_no_networks_casecmp {
321 return skip_no_networks ||
322 skip_os ('solaris');
323 }
324
325 sub skip_big_endian {
326 return pack ('S', 0x4245) eq 'BE' ? 'big-endian' : '';
327 }
328
329 sub skip_little_endian {
330 return pack ('S', 0x454c) eq 'LE' ? 'little-endian' : '';
331 }
332
333 # In accept_blocks the top-level keys are test block names. Each test block
334 # defines one or more tests. When possible, a test block name should be easy
335 # to relate with the main filter expression, for example, ip_multicast for
336 # "ip multicast" etc. However, because in Perl hashes the keys are not ordered,
337 # sometimes the easiest way to group the tests in the alphabetically-sorted
338 # output is to use an artificial prefix, for example, mtp2_ for "fisu", "lssu",
339 # "msu" etc. The top-level values are in turn hashes, where the keys have the
340 # following meaning:
341 #
342 # * DLT (mandatory, string): the name of the DLT to use for the test
343 # * aliases (mandatory, array of strings): must contain at least one string,
344 # each string is a filter expression and must produce exactly the same
345 # bytecode (applies to "opt" and "unopt" separately)
346 # * snaplen (optional, int): the snapshot length to use for the test
347 # * opt (optional, [multi-line] string): the expected optimised bytecode
348 # * unopt (optional, [multi-line] string): the expected unoptimised bytecode
349 # * skip (optional, string): if defined and is not equal to an empty string,
350 # causes the test to skip using the string as the reason
351 # * linuxext (optional, int): if defined and is equal to 1, use Linux BPF
352 # extensions.
353 # * netmask (optional, string, dotted-quad): the netmask for pcap_compile()
354 #
355 # At least one of "opt" and "unopt" must be defined in each accept test block.
356
357 my @accept_blocks = (
358 {
359 name => 'empty',
360 DLT => 'EN10MB',
361 aliases => [''],
362 unopt => '
363 (000) ret #262144
364 ',
365 },
366
367 {
368 name => 'greater',
369 DLT => 'RAW',
370 snaplen => 200,
371 aliases => [
372 'greater 100',
373 'len >= 100',
374 'length >= 100',
375 ],
376 # Only the optimized bytecode is equivalent!
377 opt => '
378 (000) ld #pktlen
379 (001) jge #0x64 jt 2 jf 3
380 (002) ret #200
381 (003) ret #0
382 ',
383 }, # greater
384 {
385 name => 'less',
386 DLT => 'RAW',
387 snaplen => 200,
388 aliases => [
389 'less 200',
390 'len <= 200',
391 'length <= 200',
392 ],
393 # Only the optimized bytecode is equivalent!
394 opt => '
395 (000) ld #pktlen
396 (001) jgt #0xc8 jt 2 jf 3
397 (002) ret #0
398 (003) ret #200
399 ',
400 }, # less
401
402 {
403 name => 'link_index_byte',
404 DLT => 'EN10MB',
405 aliases => [
406 'link[5] == 0x12',
407 'ether[5] == 0x12',
408 'fddi[5] == 0x12',
409 'ppp[5] == 0x12',
410 'slip[5] == 0x12',
411 'tr[5] == 0x12',
412 'wlan[5] == 0x12',
413 'ether[5:1] == 0x12',
414 'fddi[5:1] == 0x12',
415 'ppp[5:1] == 0x12',
416 'slip[5:1] == 0x12',
417 'tr[5:1] == 0x12',
418 'wlan[5:1] == 0x12',
419 ],
420 opt => '
421 (000) ldb [5]
422 (001) jeq #0x12 jt 2 jf 3
423 (002) ret #262144
424 (003) ret #0
425 ',
426 }, # link_index_byte
427 {
428 name => 'link_index_halfword',
429 DLT => 'EN10MB',
430 aliases => [
431 'link[7:2] == 0x1234',
432 'ether[7:2] == 0x1234',
433 'fddi[7:2] == 0x1234',
434 'ppp[7:2] == 0x1234',
435 'slip[7:2] == 0x1234',
436 'tr[7:2] == 0x1234',
437 'wlan[7:2] == 0x1234',
438 ],
439 opt => '
440 (000) ldh [7]
441 (001) jeq #0x1234 jt 2 jf 3
442 (002) ret #262144
443 (003) ret #0
444 ',
445 }, # link_index_halfword
446 {
447 name => 'link_index_word',
448 DLT => 'EN10MB',
449 aliases => [
450 'link[10:4] == 0x12345678',
451 'ether[10:4] == 0x12345678',
452 'fddi[10:4] == 0x12345678',
453 'ppp[10:4] == 0x12345678',
454 'slip[10:4] == 0x12345678',
455 'tr[10:4] == 0x12345678',
456 'wlan[10:4] == 0x12345678',
457 ],
458 opt => '
459 (000) ld [10]
460 (001) jeq #0x12345678 jt 2 jf 3
461 (002) ret #262144
462 (003) ret #0
463 ',
464 }, # link_index_word
465
466 {
467 name => 'icmp_index_icmptype',
468 DLT => 'EN10MB',
469 snaplen => 16000,
470 # Verify that the named offset resolves to the same constant and that the
471 # protocol supports index operation.
472 aliases => [
473 'icmp[icmptype] != 0xff',
474 'icmp[0] != 0xff',
475 ],
476 opt => '
477 (000) ldh [12]
478 (001) jeq #0x800 jt 2 jf 10
479 (002) ldb [23]
480 (003) jeq #0x1 jt 4 jf 10
481 (004) ldh [20]
482 (005) jset #0x1fff jt 10 jf 6
483 (006) ldxb 4*([14]&0xf)
484 (007) ldb [x + 14]
485 (008) jeq #0xff jt 10 jf 9
486 (009) ret #16000
487 (010) ret #0
488 ',
489 }, # icmp_index_icmptype
490 {
491 name => 'icmp_index_icmpcode',
492 DLT => 'EN10MB',
493 snaplen => 16000,
494 # Same as for icmp[icmptype] above.
495 aliases => [
496 'icmp[icmpcode] != 0xff',
497 'icmp[1] != 0xff',
498 ],
499 opt => '
500 (000) ldh [12]
501 (001) jeq #0x800 jt 2 jf 10
502 (002) ldb [23]
503 (003) jeq #0x1 jt 4 jf 10
504 (004) ldh [20]
505 (005) jset #0x1fff jt 10 jf 6
506 (006) ldxb 4*([14]&0xf)
507 (007) ldb [x + 15]
508 (008) jeq #0xff jt 10 jf 9
509 (009) ret #16000
510 (010) ret #0
511 ',
512 }, # icmp_index_icmpcode
513 {
514 name => 'icmp6_index_icmp6type',
515 DLT => 'IPV6',
516 snaplen => 10000,
517 # Same as for icmp[icmptype] above.
518 aliases => [
519 'icmp6[icmp6type] != 0xff',
520 'icmp6[0] != 0xff',
521 ],
522 opt => '
523 (000) ld #0x0
524 (001) ldb [6]
525 (002) jeq #0x3a jt 3 jf 6
526 (003) ldb [40]
527 (004) jeq #0xff jt 6 jf 5
528 (005) ret #10000
529 (006) ret #0
530 ',
531 }, # icmp6_index_icmp6type
532 {
533 name => 'icmp6_index_icmp6code',
534 DLT => 'IPV6',
535 snaplen => 10000,
536 # Same as for icmp[icmptype] above.
537 aliases => [
538 'icmp6[icmp6code] != 0xff',
539 'icmp6[1] != 0xff',
540 ],
541 opt => '
542 (000) ld #0x0
543 (001) ldb [6]
544 (002) jeq #0x3a jt 3 jf 6
545 (003) ldb [41]
546 (004) jeq #0xff jt 6 jf 5
547 (005) ret #10000
548 (006) ret #0
549 ',
550 }, # icmp6_index_icmp6code
551 {
552 name => 'udp_index_halfword',
553 DLT => 'RAW',
554 snaplen => 65535,
555 # The implementation is IPv4-only.
556 aliases => ['udp[8:2] == 0xabcd'],
557 opt => '
558 (000) ldb [0]
559 (001) and #0xf0
560 (002) jeq #0x40 jt 3 jf 11
561 (003) ldb [9]
562 (004) jeq #0x11 jt 5 jf 11
563 (005) ldh [6]
564 (006) jset #0x1fff jt 11 jf 7
565 (007) ldxb 4*([0]&0xf)
566 (008) ldh [x + 8]
567 (009) jeq #0xabcd jt 10 jf 11
568 (010) ret #65535
569 (011) ret #0
570 ',
571 }, # udp_index_halfword
572 {
573 name => 'tcp_index_byte',
574 DLT => 'RAW',
575 snaplen => 262144,
576 # Same as for icmp[icmptype] above.
577 # The implementation is IPv4-only.
578 aliases => [
579 'tcp[tcpflags] == 0xFF',
580 'tcp[13] == 0xFF',
581 ],
582 opt => '
583 (000) ldb [0]
584 (001) and #0xf0
585 (002) jeq #0x40 jt 3 jf 11
586 (003) ldb [9]
587 (004) jeq #0x6 jt 5 jf 11
588 (005) ldh [6]
589 (006) jset #0x1fff jt 11 jf 7
590 (007) ldxb 4*([0]&0xf)
591 (008) ldb [x + 13]
592 (009) jeq #0xff jt 10 jf 11
593 (010) ret #262144
594 (011) ret #0
595 ',
596 }, # tcp_index_byte
597 {
598 name => 'linux_sll_inbound',
599 DLT => 'LINUX_SLL',
600 snaplen => 65535,
601 aliases => ['inbound'],
602 unopt => '
603 (000) ldh [0]
604 (001) jeq #0x4 jt 2 jf 3
605 (002) ret #0
606 (003) ret #65535
607 ',
608 }, # linux_sll_inbound
609 {
610 name => 'linux_sll_outbound',
611 DLT => 'LINUX_SLL',
612 snaplen => 65535,
613 aliases => ['outbound'],
614 unopt => '
615 (000) ldh [0]
616 (001) jeq #0x4 jt 2 jf 3
617 (002) ret #65535
618 (003) ret #0
619 ',
620 }, # linux_sll_outbound
621 {
622 name => 'linux_sll2_inbound',
623 DLT => 'LINUX_SLL2',
624 snaplen => 65535,
625 aliases => ['inbound'],
626 unopt => '
627 (000) ldb [10]
628 (001) jeq #0x4 jt 2 jf 3
629 (002) ret #0
630 (003) ret #65535
631 ',
632 }, # linux_sll2_inbound
633 {
634 name => 'linux_sll2_outbound',
635 DLT => 'LINUX_SLL2',
636 snaplen => 65535,
637 aliases => ['outbound'],
638 unopt => '
639 (000) ldb [10]
640 (001) jeq #0x4 jt 2 jf 3
641 (002) ret #65535
642 (003) ret #0
643 ',
644 }, # linux_sll2_outbound
645 {
646 name => 'linux_sll2_ifindex',
647 DLT => 'LINUX_SLL2',
648 snaplen => 65535,
649 aliases => ['ifindex 7'],
650 unopt => '
651 (000) ld [4]
652 (001) jeq #0x7 jt 2 jf 3
653 (002) ret #65535
654 (003) ret #0
655 ',
656 }, # linux_sll2_ifindex
657 {
658 name => 'slip_inbound',
659 DLT => 'SLIP',
660 snaplen => 100,
661 aliases => ['inbound'],
662 unopt => '
663 (000) ldb [0]
664 (001) jeq #0x0 jt 2 jf 3
665 (002) ret #100
666 (003) ret #0
667 ',
668 }, # slip_inbound
669 {
670 name => 'slip_outbound',
671 DLT => 'SLIP',
672 snaplen => 100,
673 aliases => ['outbound'],
674 unopt => '
675 (000) ldb [0]
676 (001) jeq #0x1 jt 2 jf 3
677 (002) ret #100
678 (003) ret #0
679 ',
680 }, # slip_outbound
681 {
682 name => 'ipnet_inbound',
683 DLT => 'IPNET',
684 snaplen => 1000,
685 aliases => ['inbound'],
686 unopt => '
687 (000) ldh [2]
688 (001) jeq #0x2 jt 2 jf 3
689 (002) ret #1000
690 (003) ret #0
691 ',
692 }, # ipnet_inbound
693 {
694 name => 'ipnet_outbound',
695 DLT => 'IPNET',
696 snaplen => 1000,
697 aliases => ['outbound'],
698 unopt => '
699 (000) ldh [2]
700 (001) jeq #0x1 jt 2 jf 3
701 (002) ret #1000
702 (003) ret #0
703 ',
704 }, # ipnet_outbound
705 {
706 name => 'pflog_inbound',
707 DLT => 'PFLOG',
708 aliases => ['inbound'],
709 unopt => '
710 (000) ldb [60]
711 (001) jeq #0x1 jt 2 jf 3
712 (002) ret #262144
713 (003) ret #0
714 ',
715 }, # pflog_inbound
716 {
717 name => 'pflog_outbound',
718 DLT => 'PFLOG',
719 aliases => ['outbound'],
720 unopt => '
721 (000) ldb [60]
722 (001) jeq #0x2 jt 2 jf 3
723 (002) ret #262144
724 (003) ret #0
725 ',
726 }, # pflog_outbound
727 {
728 name => 'ppp_pppd_inbound',
729 DLT => 'PPP_PPPD',
730 aliases => ['inbound'],
731 unopt => '
732 (000) ldb [0]
733 (001) jeq #0x0 jt 2 jf 3
734 (002) ret #262144
735 (003) ret #0
736 ',
737 }, # ppp_pppd_inbound
738 {
739 name => 'ppp_pppd_oubound',
740 DLT => 'PPP_PPPD',
741 aliases => ['outbound'],
742 unopt => '
743 (000) ldb [0]
744 (001) jeq #0x1 jt 2 jf 3
745 (002) ret #262144
746 (003) ret #0
747 ',
748 }, # ppp_pppd_oubound
749 {
750 name => 'juniper_mfr_inbound',
751 DLT => 'JUNIPER_MFR',
752 aliases => ['inbound'],
753 unopt => '
754 (000) ldb [3]
755 (001) and #0x1
756 (002) jeq #0x1 jt 3 jf 4
757 (003) ret #262144
758 (004) ret #0
759 ',
760 }, # juniper_mfr_inbound
761 {
762 name => 'juniper_mfr_outbound',
763 DLT => 'JUNIPER_MFR',
764 aliases => ['outbound'],
765 unopt => '
766 (000) ldb [3]
767 (001) and #0x1
768 (002) jeq #0x0 jt 3 jf 4
769 (003) ret #262144
770 (004) ret #0
771 ',
772 }, # juniper_mfr_outbound
773 {
774 name => 'inbound_linuxext',
775 skip => skip_os_not ('linux'),
776 linuxext => 1,
777 DLT => 'EN10MB',
778 aliases => ['inbound'],
779 unopt => '
780 (000) ldh [type]
781 (001) jeq #0x4 jt 2 jf 3
782 (002) ret #0
783 (003) ret #262144
784 ',
785 }, # inbound_linuxext
786 {
787 name => 'outbound_linuxext',
788 skip => skip_os_not ('linux'),
789 linuxext => 1,
790 DLT => 'EN10MB',
791 aliases => ['outbound'],
792 unopt => '
793 (000) ldh [type]
794 (001) jeq #0x4 jt 2 jf 3
795 (002) ret #262144
796 (003) ret #0
797 ',
798 }, # outbound_linuxext
799 {
800 name => 'ifindex_linuxext',
801 skip => skip_os_not ('linux'),
802 linuxext => 1,
803 DLT => 'EN10MB',
804 aliases => ['ifindex 10'],
805 unopt => '
806 (000) ld [ifidx]
807 (001) jeq #0xa jt 2 jf 3
808 (002) ret #262144
809 (003) ret #0
810 ',
811 }, # ifindex_linuxext
812
813 {
814 name => 'pflog_ifname',
815 DLT => 'PFLOG',
816 aliases => [
817 'ifname testname1',
818 'on testname1',
819 ],
820 unopt => '
821 (000) ld [9]
822 (001) jeq #0x616d6531 jt 2 jf 7
823 (002) ld [5]
824 (003) jeq #0x6573746e jt 4 jf 7
825 (004) ldb [4]
826 (005) jeq #0x74 jt 6 jf 7
827 (006) ret #262144
828 (007) ret #0
829 ',
830 }, # pflog_ifname
831 {
832 name => 'pflog_rnr',
833 DLT => 'PFLOG',
834 aliases => [
835 'rnr 0x456789',
836 'rulenum 0x456789',
837 ],
838 unopt => '
839 (000) ld [36]
840 (001) jeq #0x456789 jt 2 jf 3
841 (002) ret #262144
842 (003) ret #0
843 ',
844 }, # pflog_rnr
845 {
846 name => 'pflog_reason_match',
847 DLT => 'PFLOG',
848 aliases => ['reason match'],
849 unopt => '
850 (000) ldb [3]
851 (001) jeq #0x0 jt 2 jf 3
852 (002) ret #262144
853 (003) ret #0
854 ',
855 }, # pflog_reason_match
856 {
857 name => 'pflog_reason_bad_offset',
858 DLT => 'PFLOG',
859 aliases => ['reason bad-offset'],
860 unopt => '
861 (000) ldb [3]
862 (001) jeq #0x1 jt 2 jf 3
863 (002) ret #262144
864 (003) ret #0
865 ',
866 }, # pflog_reason_bad_offset
867 {
868 name => 'pflog_reason_fragment',
869 DLT => 'PFLOG',
870 aliases => ['reason fragment'],
871 unopt => '
872 (000) ldb [3]
873 (001) jeq #0x2 jt 2 jf 3
874 (002) ret #262144
875 (003) ret #0
876 ',
877 }, # pflog_reason_fragment
878 {
879 name => 'pflog_reason_short',
880 DLT => 'PFLOG',
881 aliases => ['reason short'],
882 unopt => '
883 (000) ldb [3]
884 (001) jeq #0x3 jt 2 jf 3
885 (002) ret #262144
886 (003) ret #0
887 ',
888 }, # pflog_reason_short
889 {
890 name => 'pflog_reason_normalize',
891 DLT => 'PFLOG',
892 aliases => ['reason normalize'],
893 unopt => '
894 (000) ldb [3]
895 (001) jeq #0x4 jt 2 jf 3
896 (002) ret #262144
897 (003) ret #0
898 ',
899 }, # pflog_reason_normalize
900 {
901 name => 'pflog_reason_memory',
902 DLT => 'PFLOG',
903 aliases => ['reason memory'],
904 unopt => '
905 (000) ldb [3]
906 (001) jeq #0x5 jt 2 jf 3
907 (002) ret #262144
908 (003) ret #0
909 ',
910 }, # pflog_reason_memory
911 {
912 name => 'pflog_reason_bad_timestamp',
913 DLT => 'PFLOG',
914 aliases => ['reason bad-timestamp'],
915 unopt => '
916 (000) ldb [3]
917 (001) jeq #0x6 jt 2 jf 3
918 (002) ret #262144
919 (003) ret #0
920 ',
921 }, # pflog_reason_bad_timestamp
922 {
923 name => 'pflog_reason_congestion',
924 DLT => 'PFLOG',
925 aliases => ['reason congestion'],
926 unopt => '
927 (000) ldb [3]
928 (001) jeq #0x7 jt 2 jf 3
929 (002) ret #262144
930 (003) ret #0
931 ',
932 }, # pflog_reason_congestion
933 {
934 name => 'pflog_reason_ip_option',
935 DLT => 'PFLOG',
936 aliases => ['reason ip-option'],
937 unopt => '
938 (000) ldb [3]
939 (001) jeq #0x8 jt 2 jf 3
940 (002) ret #262144
941 (003) ret #0
942 ',
943 }, # pflog_reason_ip_option
944 {
945 name => 'pflog_reason_proto_cksum',
946 DLT => 'PFLOG',
947 aliases => ['reason proto-cksum'],
948 unopt => '
949 (000) ldb [3]
950 (001) jeq #0x9 jt 2 jf 3
951 (002) ret #262144
952 (003) ret #0
953 ',
954 }, # pflog_reason_proto_cksum
955 {
956 name => 'pflog_reason_state_mismatch',
957 DLT => 'PFLOG',
958 aliases => ['reason state-mismatch'],
959 unopt => '
960 (000) ldb [3]
961 (001) jeq #0xa jt 2 jf 3
962 (002) ret #262144
963 (003) ret #0
964 ',
965 }, # pflog_reason_state_mismatch
966 {
967 name => 'pflog_reason_state_insert',
968 DLT => 'PFLOG',
969 aliases => ['reason state-insert'],
970 unopt => '
971 (000) ldb [3]
972 (001) jeq #0xb jt 2 jf 3
973 (002) ret #262144
974 (003) ret #0
975 ',
976 }, # pflog_reason_state_insert
977 {
978 name => 'pflog_reason_state_limit',
979 DLT => 'PFLOG',
980 aliases => ['reason state-limit'],
981 unopt => '
982 (000) ldb [3]
983 (001) jeq #0xc jt 2 jf 3
984 (002) ret #262144
985 (003) ret #0
986 ',
987 }, # pflog_reason_state_limit
988 {
989 name => 'pflog_reason_src_limit',
990 DLT => 'PFLOG',
991 aliases => ['reason src-limit'],
992 unopt => '
993 (000) ldb [3]
994 (001) jeq #0xd jt 2 jf 3
995 (002) ret #262144
996 (003) ret #0
997 ',
998 }, # pflog_reason_src_limit
999 {
1000 name => 'pflog_reason_synproxy',
1001 DLT => 'PFLOG',
1002 aliases => ['reason synproxy'],
1003 unopt => '
1004 (000) ldb [3]
1005 (001) jeq #0xe jt 2 jf 3
1006 (002) ret #262144
1007 (003) ret #0
1008 ',
1009 }, # pflog_reason_synproxy
1010 {
1011 name => 'pflog_reason_map_failed',
1012 skip => skip_os_not ('freebsd'),
1013 DLT => 'PFLOG',
1014 aliases => ['reason map-failed'],
1015 unopt => '
1016 (000) ldb [3]
1017 (001) jeq #0xf jt 2 jf 3
1018 (002) ret #262144
1019 (003) ret #0
1020 ',
1021 }, # pflog_reason_map_failed
1022 {
1023 name => 'pflog_reason_state_locked',
1024 skip => skip_os_not ('netbsd'),
1025 DLT => 'PFLOG',
1026 aliases => ['reason state-locked'],
1027 unopt => '
1028 (000) ldb [3]
1029 (001) jeq #0xf jt 2 jf 3
1030 (002) ret #262144
1031 (003) ret #0
1032 ',
1033 }, # pflog_reason_state_locked
1034 {
1035 name => 'pflog_reason_translate',
1036 skip => skip_os_not ('openbsd'),
1037 DLT => 'PFLOG',
1038 aliases => ['reason translate'],
1039 unopt => '
1040 (000) ldb [3]
1041 (001) jeq #0xf jt 2 jf 3
1042 (002) ret #262144
1043 (003) ret #0
1044 ',
1045 }, # pflog_reason_translate
1046 {
1047 name => 'pflog_reason_no_route',
1048 skip => skip_os_not ('openbsd'),
1049 DLT => 'PFLOG',
1050 aliases => ['reason no-route'],
1051 unopt => '
1052 (000) ldb [3]
1053 (001) jeq #0x10 jt 2 jf 3
1054 (002) ret #262144
1055 (003) ret #0
1056 ',
1057 }, # pflog_reason_no_route
1058 {
1059 name => 'pflog_reason_dummynet',
1060 skip => skip_os_not ('darwin'),
1061 DLT => 'PFLOG',
1062 aliases => ['reason dummynet'],
1063 unopt => '
1064 (000) ldb [3]
1065 (001) jeq #0xf jt 2 jf 3
1066 (002) ret #262144
1067 (003) ret #0
1068 ',
1069 }, # pflog_reason_dummynet
1070 {
1071 name => 'pflog_rset',
1072 DLT => 'PFLOG',
1073 aliases => [
1074 'rset testruleset2',
1075 'ruleset testruleset2',
1076 ],
1077 unopt => '
1078 (000) ld [28]
1079 (001) jeq #0x73657432 jt 2 jf 7
1080 (002) ld [24]
1081 (003) jeq #0x72756c65 jt 4 jf 7
1082 (004) ld [20]
1083 (005) jeq #0x74657374 jt 6 jf 7
1084 (006) ret #262144
1085 (007) ret #0
1086 ',
1087 }, # pflog_rset
1088 {
1089 name => 'pflog_srnr',
1090 DLT => 'PFLOG',
1091 aliases => [
1092 'srnr 123',
1093 'subrulenum 123',
1094 ],
1095 unopt => '
1096 (000) ld [40]
1097 (001) jeq #0x7b jt 2 jf 3
1098 (002) ret #262144
1099 (003) ret #0
1100 ',
1101 }, # pflog_srnr
1102 {
1103 name => 'pflog_action_pass',
1104 DLT => 'PFLOG',
1105 aliases => [
1106 'action pass',
1107 'action accept',
1108 ],
1109 unopt => '
1110 (000) ldb [2]
1111 (001) jeq #0x0 jt 2 jf 3
1112 (002) ret #262144
1113 (003) ret #0
1114 ',
1115 }, # pflog_action_pass
1116 {
1117 name => 'pflog_action_block',
1118 DLT => 'PFLOG',
1119 aliases => [
1120 'action block',
1121 'action drop',
1122 ],
1123 unopt => '
1124 (000) ldb [2]
1125 (001) jeq #0x1 jt 2 jf 3
1126 (002) ret #262144
1127 (003) ret #0
1128 ',
1129 }, # pflog_action_block
1130 {
1131 name => 'pflog_action_scrub',
1132 DLT => 'PFLOG',
1133 aliases => ['action scrub'],
1134 unopt => '
1135 (000) ldb [2]
1136 (001) jeq #0x2 jt 2 jf 3
1137 (002) ret #262144
1138 (003) ret #0
1139 ',
1140 }, # pflog_action_scrub
1141 {
1142 name => 'pflog_action_noscrub',
1143 DLT => 'PFLOG',
1144 aliases => ['action noscrub'],
1145 unopt => '
1146 (000) ldb [2]
1147 (001) jeq #0x3 jt 2 jf 3
1148 (002) ret #262144
1149 (003) ret #0
1150 ',
1151 }, # pflog_action_noscrub
1152 {
1153 name => 'pflog_action_nat',
1154 DLT => 'PFLOG',
1155 aliases => ['action nat'],
1156 unopt => '
1157 (000) ldb [2]
1158 (001) jeq #0x4 jt 2 jf 3
1159 (002) ret #262144
1160 (003) ret #0
1161 ',
1162 }, # pflog_action_nat
1163 {
1164 name => 'pflog_action_nonat',
1165 DLT => 'PFLOG',
1166 aliases => ['action nonat'],
1167 unopt => '
1168 (000) ldb [2]
1169 (001) jeq #0x5 jt 2 jf 3
1170 (002) ret #262144
1171 (003) ret #0
1172 ',
1173 }, # pflog_action_nonat
1174 {
1175 name => 'pflog_action_binat',
1176 DLT => 'PFLOG',
1177 aliases => ['action binat'],
1178 unopt => '
1179 (000) ldb [2]
1180 (001) jeq #0x6 jt 2 jf 3
1181 (002) ret #262144
1182 (003) ret #0
1183 ',
1184 }, # pflog_action_binat
1185 {
1186 name => 'pflog_action_nobinat',
1187 DLT => 'PFLOG',
1188 aliases => ['action nobinat'],
1189 unopt => '
1190 (000) ldb [2]
1191 (001) jeq #0x7 jt 2 jf 3
1192 (002) ret #262144
1193 (003) ret #0
1194 ',
1195 }, # pflog_action_nobinat
1196 {
1197 name => 'pflog_action_rdr',
1198 DLT => 'PFLOG',
1199 aliases => ['action rdr'],
1200 unopt => '
1201 (000) ldb [2]
1202 (001) jeq #0x8 jt 2 jf 3
1203 (002) ret #262144
1204 (003) ret #0
1205 ',
1206 }, # pflog_action_rdr
1207 {
1208 name => 'pflog_action_nordr',
1209 DLT => 'PFLOG',
1210 aliases => ['action nordr'],
1211 unopt => '
1212 (000) ldb [2]
1213 (001) jeq #0x9 jt 2 jf 3
1214 (002) ret #262144
1215 (003) ret #0
1216 ',
1217 }, # pflog_action_nordr
1218 {
1219 name => 'pflog_action_synproxy_drop',
1220 DLT => 'PFLOG',
1221 aliases => ['action synproxy-drop'],
1222 unopt => '
1223 (000) ldb [2]
1224 (001) jeq #0xa jt 2 jf 3
1225 (002) ret #262144
1226 (003) ret #0
1227 ',
1228 }, # pflog_action_synproxy_drop
1229 {
1230 name => 'pflog_action_defer',
1231 skip => skip_os_not ('freebsd') && skip_os_not ('openbsd'),
1232 DLT => 'PFLOG',
1233 aliases => ['action defer'],
1234 unopt => '
1235 (000) ldb [2]
1236 (001) jeq #0xb jt 2 jf 3
1237 (002) ret #262144
1238 (003) ret #0
1239 ',
1240 }, # pflog_action_defer
1241 {
1242 name => 'pflog_action_match',
1243 skip => skip_os_not ('openbsd'),
1244 DLT => 'PFLOG',
1245 aliases => ['action match'],
1246 unopt => '
1247 (000) ldb [2]
1248 (001) jeq #0xc jt 2 jf 3
1249 (002) ret #262144
1250 (003) ret #0
1251 ',
1252 }, # pflog_action_match
1253 {
1254 name => 'pflog_action_divert',
1255 skip => skip_os_not ('openbsd'),
1256 DLT => 'PFLOG',
1257 aliases => ['action divert'],
1258 unopt => '
1259 (000) ldb [2]
1260 (001) jeq #0xd jt 2 jf 3
1261 (002) ret #262144
1262 (003) ret #0
1263 ',
1264 }, # pflog_action_divert
1265 {
1266 name => 'pflog_action_rt',
1267 skip => skip_os_not ('openbsd'),
1268 DLT => 'PFLOG',
1269 aliases => ['action rt'],
1270 unopt => '
1271 (000) ldb [2]
1272 (001) jeq #0xe jt 2 jf 3
1273 (002) ret #262144
1274 (003) ret #0
1275 ',
1276 }, # pflog_action_rt
1277 {
1278 name => 'pflog_action_afrt',
1279 skip => skip_os_not ('openbsd'),
1280 DLT => 'PFLOG',
1281 aliases => ['action afrt'],
1282 unopt => '
1283 (000) ldb [2]
1284 (001) jeq #0xf jt 2 jf 3
1285 (002) ret #262144
1286 (003) ret #0
1287 ',
1288 }, # pflog_action_afrt
1289 {
1290 name => 'pflog_action_dummynet',
1291 skip => skip_os_not ('darwin'),
1292 DLT => 'PFLOG',
1293 aliases => ['action dummynet'],
1294 unopt => '
1295 (000) ldb [2]
1296 (001) jeq #0xb jt 2 jf 3
1297 (002) ret #262144
1298 (003) ret #0
1299 ',
1300 }, # pflog_action_dummynet
1301 {
1302 name => 'pflog_action_nodummynet',
1303 skip => skip_os_not ('darwin'),
1304 DLT => 'PFLOG',
1305 aliases => ['action nodummynet'],
1306 unopt => '
1307 (000) ldb [2]
1308 (001) jeq #0xc jt 2 jf 3
1309 (002) ret #262144
1310 (003) ret #0
1311 ',
1312 }, # pflog_action_nodummynet
1313 {
1314 name => 'pflog_action_nat64',
1315 skip => skip_os_not ('darwin'),
1316 DLT => 'PFLOG',
1317 aliases => ['action nat64'],
1318 unopt => '
1319 (000) ldb [2]
1320 (001) jeq #0xd jt 2 jf 3
1321 (002) ret #262144
1322 (003) ret #0
1323 ',
1324 }, # pflog_action_nat64
1325 {
1326 name => 'pflog_action_nonat64',
1327 skip => skip_os_not ('darwin'),
1328 DLT => 'PFLOG',
1329 aliases => ['action nonat64'],
1330 unopt => '
1331 (000) ldb [2]
1332 (001) jeq #0xe jt 2 jf 3
1333 (002) ret #262144
1334 (003) ret #0
1335 ',
1336 }, # pflog_action_nonat64
1337
1338 {
1339 name => 'mtp2_fisu',
1340 DLT => 'MTP2',
1341 aliases => ['fisu'],
1342 opt => '
1343 (000) ldb [2]
1344 (001) jset #0x3f jt 2 jf 3
1345 (002) ret #0
1346 (003) ret #262144
1347 ',
1348 }, # mtp2_fisu
1349 {
1350 name => 'mtp2_lssu',
1351 DLT => 'MTP2',
1352 aliases => [
1353 'lssu',
1354 'lsu', # Not documented (and probably should not be).
1355 ],
1356 opt => '
1357 (000) ldb [2]
1358 (001) and #0x3f
1359 (002) jgt #0x0 jt 3 jf 7
1360 (003) ldb [2]
1361 (004) and #0x3f
1362 (005) jgt #0x2 jt 7 jf 6
1363 (006) ret #262144
1364 (007) ret #0
1365 ',
1366 }, # mtp2_lssu
1367 {
1368 name => 'mtp2_msu',
1369 DLT => 'MTP2',
1370 aliases => ['msu'],
1371 opt => '
1372 (000) ldb [2]
1373 (001) and #0x3f
1374 (002) jgt #0x2 jt 3 jf 4
1375 (003) ret #262144
1376 (004) ret #0
1377 ',
1378 }, # mtp2_msu
1379 {
1380 name => 'mtp2_sio',
1381 DLT => 'MTP2',
1382 aliases => [
1383 'sio 0xd2',
1384 'sio = 0xd2',
1385 'sio == 0xd2',
1386 'sio (0xd2)',
1387 'sio (0xd2 or 0xd2)',
1388 ],
1389 opt => '
1390 (000) ldb [3]
1391 (001) jeq #0xd2 jt 2 jf 3
1392 (002) ret #262144
1393 (003) ret #0
1394 ',
1395 }, # mtp2_sio
1396 {
1397 name => 'mtp2_sio_gt',
1398 DLT => 'MTP2',
1399 aliases => ['sio > 0xa1'],
1400 unopt => '
1401 (000) ldb [3]
1402 (001) jgt #0xa1 jt 2 jf 3
1403 (002) ret #262144
1404 (003) ret #0
1405 ',
1406 }, # mtp2_sio_gt
1407 {
1408 name => 'mtp2_sio_ge',
1409 DLT => 'MTP2',
1410 aliases => ['sio >= 0xa2'],
1411 unopt => '
1412 (000) ldb [3]
1413 (001) jge #0xa2 jt 2 jf 3
1414 (002) ret #262144
1415 (003) ret #0
1416 ',
1417 }, # mtp2_sio_ge
1418 {
1419 name => 'mtp2_sio_le',
1420 DLT => 'MTP2',
1421 aliases => ['sio <= 0xa3'],
1422 unopt => '
1423 (000) ldb [3]
1424 (001) jgt #0xa3 jt 2 jf 3
1425 (002) ret #0
1426 (003) ret #262144
1427 ',
1428 }, # mtp2_sio_le
1429 {
1430 name => 'mtp2_sio_lt',
1431 DLT => 'MTP2',
1432 aliases => ['sio < 0xa4'],
1433 unopt => '
1434 (000) ldb [3]
1435 (001) jge #0xa4 jt 2 jf 3
1436 (002) ret #0
1437 (003) ret #262144
1438 ',
1439 }, # mtp2_sio_lt
1440 {
1441 name => 'mtp2_sio_ne',
1442 DLT => 'MTP2',
1443 aliases => ['sio != 0xa5'],
1444 unopt => '
1445 (000) ldb [3]
1446 (001) jeq #0xa5 jt 2 jf 3
1447 (002) ret #0
1448 (003) ret #262144
1449 ',
1450 }, # mtp2_sio_ne
1451 {
1452 name => 'mtp2_sio_nary',
1453 DLT => 'MTP2',
1454 aliases => ['sio (73 or 74 or 75)'],
1455 opt => '
1456 (000) ldb [3]
1457 (001) jeq #0x49 jt 4 jf 2
1458 (002) jeq #0x4a jt 4 jf 3
1459 (003) jeq #0x4b jt 4 jf 5
1460 (004) ret #262144
1461 (005) ret #0
1462 ',
1463 }, # mtp2_sio_nary
1464 {
1465 name => 'mtp3_dpc',
1466 DLT => 'MTP2',
1467 aliases => [
1468 'dpc 0x31d6',
1469 'dpc = 0x31d6',
1470 'dpc == 0x31d6',
1471 'dpc (0x31d6)',
1472 'dpc (0x31d6 or 0x31d6)',
1473 ],
1474 opt => '
1475 (000) ldh [4]
1476 (001) and #0xff3f
1477 (002) jeq #0xd631 jt 3 jf 4
1478 (003) ret #262144
1479 (004) ret #0
1480 ',
1481 }, # mtp3_dpc
1482 {
1483 name => 'mtp3_dpc_gt',
1484 DLT => 'MTP2',
1485 aliases => ['dpc > 0x1273'],
1486 unopt => '
1487 (000) ldh [4]
1488 (001) and #0xff3f
1489 (002) jgt #0x7312 jt 3 jf 4
1490 (003) ret #262144
1491 (004) ret #0
1492 ',
1493 }, # mtp3_dpc_gt
1494 {
1495 name => 'mtp3_dpc_ge',
1496 DLT => 'MTP2',
1497 aliases => ['dpc >= 0x1273'],
1498 unopt => '
1499 (000) ldh [4]
1500 (001) and #0xff3f
1501 (002) jge #0x7312 jt 3 jf 4
1502 (003) ret #262144
1503 (004) ret #0
1504 ',
1505 }, # mtp3_dpc_ge
1506 {
1507 name => 'mtp3_dpc_le',
1508 DLT => 'MTP2',
1509 aliases => ['dpc <= 0x1273'],
1510 unopt => '
1511 (000) ldh [4]
1512 (001) and #0xff3f
1513 (002) jgt #0x7312 jt 3 jf 4
1514 (003) ret #0
1515 (004) ret #262144
1516 ',
1517 }, # mtp3_dpc_le
1518 {
1519 name => 'mtp3_dpc_lt',
1520 DLT => 'MTP2',
1521 aliases => ['dpc < 0x1273'],
1522 unopt => '
1523 (000) ldh [4]
1524 (001) and #0xff3f
1525 (002) jge #0x7312 jt 3 jf 4
1526 (003) ret #0
1527 (004) ret #262144
1528 ',
1529 }, # mtp3_dpc_lt
1530 {
1531 name => 'mtp3_dpc_ne',
1532 DLT => 'MTP2',
1533 aliases => ['dpc != 0x1273'],
1534 unopt => '
1535 (000) ldh [4]
1536 (001) and #0xff3f
1537 (002) jeq #0x7312 jt 3 jf 4
1538 (003) ret #0
1539 (004) ret #262144
1540 ',
1541 }, # mtp3_dpc_ne
1542 {
1543 name => 'mtp3_dpc_nary',
1544 DLT => 'MTP2',
1545 aliases => ['dpc (0x1274 or 0x1275 or 0x1276)'],
1546 unopt => '
1547 (000) ldh [4]
1548 (001) and #0xff3f
1549 (002) jeq #0x7412 jt 9 jf 3
1550 (003) ldh [4]
1551 (004) and #0xff3f
1552 (005) jeq #0x7512 jt 9 jf 6
1553 (006) ldh [4]
1554 (007) and #0xff3f
1555 (008) jeq #0x7612 jt 9 jf 10
1556 (009) ret #262144
1557 (010) ret #0
1558 ',
1559 }, # mtp3_dpc_nary
1560 {
1561 name => 'mtp3_opc',
1562 DLT => 'MTP2',
1563 aliases => [
1564 'opc 0x3b35',
1565 'opc = 0x3b35',
1566 'opc == 0x3b35',
1567 'opc (0x3b35)',
1568 'opc (0x3b35 or 0x3b35)',
1569 ],
1570 opt => '
1571 (000) ld [4]
1572 (001) and #0xc0ff0f
1573 (002) jeq #0x40cd0e jt 3 jf 4
1574 (003) ret #262144
1575 (004) ret #0
1576 ',
1577 }, # mtp3_opc
1578 {
1579 name => 'mtp3_opc_gt',
1580 DLT => 'MTP2',
1581 aliases => ['opc > 0x607'],
1582 unopt => '
1583 (000) ld [4]
1584 (001) and #0xc0ff0f
1585 (002) jgt #0xc08101 jt 3 jf 4
1586 (003) ret #262144
1587 (004) ret #0
1588 ',
1589 }, # mtp3_opc_gt
1590 {
1591 name => 'mtp3_opc_ge',
1592 DLT => 'MTP2',
1593 aliases => ['opc >= 0x607'],
1594 unopt => '
1595 (000) ld [4]
1596 (001) and #0xc0ff0f
1597 (002) jge #0xc08101 jt 3 jf 4
1598 (003) ret #262144
1599 (004) ret #0
1600 ',
1601 }, # mtp3_opc_ge
1602 {
1603 name => 'mtp3_opc_le',
1604 DLT => 'MTP2',
1605 aliases => ['opc <= 0x607'],
1606 unopt => '
1607 (000) ld [4]
1608 (001) and #0xc0ff0f
1609 (002) jgt #0xc08101 jt 3 jf 4
1610 (003) ret #0
1611 (004) ret #262144
1612 ',
1613 }, # mtp3_opc_le
1614 {
1615 name => 'mtp3_opc_lt',
1616 DLT => 'MTP2',
1617 aliases => ['opc < 0x607'],
1618 unopt => '
1619 (000) ld [4]
1620 (001) and #0xc0ff0f
1621 (002) jge #0xc08101 jt 3 jf 4
1622 (003) ret #0
1623 (004) ret #262144
1624 ',
1625 }, # mtp3_opc_lt
1626 {
1627 name => 'mtp3_opc_ne',
1628 DLT => 'MTP2',
1629 aliases => ['opc != 0x607'],
1630 unopt => '
1631 (000) ld [4]
1632 (001) and #0xc0ff0f
1633 (002) jeq #0xc08101 jt 3 jf 4
1634 (003) ret #0
1635 (004) ret #262144
1636 ',
1637 }, # mtp3_opc_ne
1638 {
1639 name => 'mtp2_opc_nary',
1640 DLT => 'MTP2',
1641 aliases => ['opc (0x608 or 0x609 or 0x60a)'],
1642 unopt => '
1643 (000) ld [4]
1644 (001) and #0xc0ff0f
1645 (002) jeq #0x8201 jt 9 jf 3
1646 (003) ld [4]
1647 (004) and #0xc0ff0f
1648 (005) jeq #0x408201 jt 9 jf 6
1649 (006) ld [4]
1650 (007) and #0xc0ff0f
1651 (008) jeq #0x808201 jt 9 jf 10
1652 (009) ret #262144
1653 (010) ret #0
1654 ',
1655 }, # mtp2_opc_nary
1656 {
1657 name => 'mtp3_sls',
1658 DLT => 'MTP2',
1659 aliases => [
1660 'sls 3',
1661 'sls = 3',
1662 'sls == 3',
1663 'sls (3)',
1664 'sls (3 or 3)',
1665 ],
1666 opt => '
1667 (000) ldb [7]
1668 (001) and #0xf0
1669 (002) jeq #0x30 jt 3 jf 4
1670 (003) ret #262144
1671 (004) ret #0
1672 ',
1673 }, # mtp3_sls
1674 {
1675 name => 'mtp3_sls_gt',
1676 DLT => 'MTP2',
1677 aliases => ['sls > 1'],
1678 unopt => '
1679 (000) ldb [7]
1680 (001) and #0xf0
1681 (002) jgt #0x10 jt 3 jf 4
1682 (003) ret #262144
1683 (004) ret #0
1684 ',
1685 }, # mtp3_sls_gt
1686 {
1687 name => 'mtp3_sls_ge',
1688 DLT => 'MTP2',
1689 aliases => ['sls >= 2'],
1690 unopt => '
1691 (000) ldb [7]
1692 (001) and #0xf0
1693 (002) jge #0x20 jt 3 jf 4
1694 (003) ret #262144
1695 (004) ret #0
1696 ',
1697 }, # mtp3_sls_ge
1698 {
1699 name => 'mtp3_sls_le',
1700 DLT => 'MTP2',
1701 aliases => ['sls <= 4'],
1702 unopt => '
1703 (000) ldb [7]
1704 (001) and #0xf0
1705 (002) jgt #0x40 jt 3 jf 4
1706 (003) ret #0
1707 (004) ret #262144
1708 ',
1709 }, # mtp3_sls_le
1710 {
1711 name => 'mtp3_sls_lt',
1712 DLT => 'MTP2',
1713 aliases => ['sls < 5'],
1714 unopt => '
1715 (000) ldb [7]
1716 (001) and #0xf0
1717 (002) jge #0x50 jt 3 jf 4
1718 (003) ret #0
1719 (004) ret #262144
1720 ',
1721 }, # mtp3_sls_lt
1722 {
1723 name => 'mtp3_sls_ne',
1724 DLT => 'MTP2',
1725 aliases => ['sls != 8'],
1726 unopt => '
1727 (000) ldb [7]
1728 (001) and #0xf0
1729 (002) jeq #0x80 jt 3 jf 4
1730 (003) ret #0
1731 (004) ret #262144
1732 ',
1733 }, # mtp3_sls_ne
1734 {
1735 name => 'mtp3_sls_nary',
1736 DLT => 'MTP2',
1737 aliases => ['sls (3 or 4 or 5)'],
1738 unopt => '
1739 (000) ldb [7]
1740 (001) and #0xf0
1741 (002) jeq #0x30 jt 9 jf 3
1742 (003) ldb [7]
1743 (004) and #0xf0
1744 (005) jeq #0x40 jt 9 jf 6
1745 (006) ldb [7]
1746 (007) and #0xf0
1747 (008) jeq #0x50 jt 9 jf 10
1748 (009) ret #262144
1749 (010) ret #0
1750 ',
1751 }, # mtp3_sls_nary
1752 {
1753 name => 'mtp2_hfisu',
1754 DLT => 'MTP2',
1755 aliases => ['hfisu'],
1756 opt => '
1757 (000) ldh [4]
1758 (001) jset #0xff80 jt 2 jf 3
1759 (002) ret #0
1760 (003) ret #262144
1761 ',
1762 }, # mtp2_hfisu
1763 {
1764 name => 'mtp2_hlssu',
1765 DLT => 'MTP2',
1766 aliases => ['hlssu'],
1767 opt => '
1768 (000) ldh [4]
1769 (001) and #0xff80
1770 (002) jgt #0x0 jt 3 jf 7
1771 (003) ldh [4]
1772 (004) and #0xff80
1773 (005) jgt #0x100 jt 7 jf 6
1774 (006) ret #262144
1775 (007) ret #0
1776 ',
1777 }, # mtp2_hlssu
1778 {
1779 name => 'mtp2_hmsu',
1780 DLT => 'MTP2',
1781 aliases => ['hmsu'],
1782 opt => '
1783 (000) ldh [4]
1784 (001) and #0xff80
1785 (002) jgt #0x100 jt 3 jf 4
1786 (003) ret #262144
1787 (004) ret #0
1788 ',
1789 }, # mtp2_hmsu
1790 {
1791 name => 'mtp2_hsio',
1792 DLT => 'MTP2',
1793 aliases => [
1794 'hsio 0x41',
1795 'hsio = 0x41',
1796 'hsio == 0x41',
1797 'hsio (0x41)',
1798 'hsio (0x41 or 0x41)',
1799 ],
1800 opt => '
1801 (000) ldb [6]
1802 (001) jeq #0x41 jt 2 jf 3
1803 (002) ret #262144
1804 (003) ret #0
1805 ',
1806 }, # mtp2_hsio
1807 {
1808 name => 'mtp2_hsio_gt',
1809 DLT => 'MTP2',
1810 aliases => ['hsio > 0x41'],
1811 unopt => '
1812 (000) ldb [6]
1813 (001) jgt #0x41 jt 2 jf 3
1814 (002) ret #262144
1815 (003) ret #0
1816 ',
1817 }, # mtp2_hsio_gt
1818 {
1819 name => 'mtp2_hsio_ge',
1820 DLT => 'MTP2',
1821 aliases => ['hsio >= 0x41'],
1822 unopt => '
1823 (000) ldb [6]
1824 (001) jge #0x41 jt 2 jf 3
1825 (002) ret #262144
1826 (003) ret #0
1827 ',
1828 }, # mtp2_hsio_ge
1829 {
1830 name => 'mtp2_hsio_le',
1831 DLT => 'MTP2',
1832 aliases => ['hsio <= 0x41'],
1833 unopt => '
1834 (000) ldb [6]
1835 (001) jgt #0x41 jt 2 jf 3
1836 (002) ret #0
1837 (003) ret #262144
1838 ',
1839 }, # mtp2_hsio_le
1840 {
1841 name => 'mtp2_hsio_lt',
1842 DLT => 'MTP2',
1843 aliases => ['hsio < 0x41'],
1844 unopt => '
1845 (000) ldb [6]
1846 (001) jge #0x41 jt 2 jf 3
1847 (002) ret #0
1848 (003) ret #262144
1849 ',
1850 }, # mtp2_hsio_lt
1851 {
1852 name => 'mtp2_hsio_ne',
1853 DLT => 'MTP2',
1854 aliases => ['hsio != 0x41'],
1855 unopt => '
1856 (000) ldb [6]
1857 (001) jeq #0x41 jt 2 jf 3
1858 (002) ret #0
1859 (003) ret #262144
1860 ',
1861 }, # mtp2_hsio_ne
1862 {
1863 name => 'mtp2_hsio_nary',
1864 DLT => 'MTP2',
1865 aliases => ['hsio (0x42 or 0x43 or 0x44)'],
1866 opt => '
1867 (000) ldb [6]
1868 (001) jeq #0x42 jt 4 jf 2
1869 (002) jeq #0x43 jt 4 jf 3
1870 (003) jeq #0x44 jt 4 jf 5
1871 (004) ret #262144
1872 (005) ret #0
1873 ',
1874 }, # mtp2_hsio_nary
1875 {
1876 name => 'mtp3_hdpc',
1877 DLT => 'MTP2',
1878 aliases => [
1879 'hdpc 0x0ab5',
1880 'hdpc = 0x0ab5',
1881 'hdpc == 0x0ab5',
1882 'hdpc (0x0ab5)',
1883 'hdpc (0x0ab5 or 0x0ab5)',
1884 ],
1885 opt => '
1886 (000) ldh [7]
1887 (001) and #0xff3f
1888 (002) jeq #0xb50a jt 3 jf 4
1889 (003) ret #262144
1890 (004) ret #0
1891 ',
1892 }, # mtp3_hdpc
1893 {
1894 name => 'mtp3_hdpc_gt',
1895 DLT => 'MTP2',
1896 aliases => ['hdpc > 0x0ab5'],
1897 unopt => '
1898 (000) ldh [7]
1899 (001) and #0xff3f
1900 (002) jgt #0xb50a jt 3 jf 4
1901 (003) ret #262144
1902 (004) ret #0
1903 ',
1904 }, # mtp3_hdpc_gt
1905 {
1906 name => 'mtp3_hdpc_ge',
1907 DLT => 'MTP2',
1908 aliases => ['hdpc >= 0x0ab5'],
1909 unopt => '
1910 (000) ldh [7]
1911 (001) and #0xff3f
1912 (002) jge #0xb50a jt 3 jf 4
1913 (003) ret #262144
1914 (004) ret #0
1915 ',
1916 }, # mtp3_hdpc_ge
1917 {
1918 name => 'mtp3_hdpc_le',
1919 DLT => 'MTP2',
1920 aliases => ['hdpc <= 0x0ab5'],
1921 unopt => '
1922 (000) ldh [7]
1923 (001) and #0xff3f
1924 (002) jgt #0xb50a jt 3 jf 4
1925 (003) ret #0
1926 (004) ret #262144
1927 ',
1928 }, # mtp3_hdpc_le
1929 {
1930 name => 'mtp3_hdpc_lt',
1931 DLT => 'MTP2',
1932 aliases => ['hdpc < 0x0ab5'],
1933 unopt => '
1934 (000) ldh [7]
1935 (001) and #0xff3f
1936 (002) jge #0xb50a jt 3 jf 4
1937 (003) ret #0
1938 (004) ret #262144
1939 ',
1940 }, # mtp3_hdpc_lt
1941 {
1942 name => 'mtp3_hdpc_ne',
1943 DLT => 'MTP2',
1944 aliases => ['hdpc != 0x0ab5'],
1945 unopt => '
1946 (000) ldh [7]
1947 (001) and #0xff3f
1948 (002) jeq #0xb50a jt 3 jf 4
1949 (003) ret #0
1950 (004) ret #262144
1951 ',
1952 }, # mtp3_hdpc_ne
1953 {
1954 name => 'mtp3_hdpc_nary',
1955 DLT => 'MTP2',
1956 aliases => ['hdpc (0x0ab6 or 0x0ab7 or 0x0ab8)'],
1957 unopt => '
1958 (000) ldh [7]
1959 (001) and #0xff3f
1960 (002) jeq #0xb60a jt 9 jf 3
1961 (003) ldh [7]
1962 (004) and #0xff3f
1963 (005) jeq #0xb70a jt 9 jf 6
1964 (006) ldh [7]
1965 (007) and #0xff3f
1966 (008) jeq #0xb80a jt 9 jf 10
1967 (009) ret #262144
1968 (010) ret #0
1969 ',
1970 }, # mtp3_hdpc_nary
1971 {
1972 name => 'mtp3_hopc',
1973 DLT => 'MTP2',
1974 aliases => [
1975 'hopc 0x3aba',
1976 'hopc = 0x3aba',
1977 'hopc == 0x3aba',
1978 'hopc (0x3aba)',
1979 'hopc (0x3aba or 0x3aba)',
1980 ],
1981 opt => '
1982 (000) ld [7]
1983 (001) and #0xc0ff0f
1984 (002) jeq #0x80ae0e jt 3 jf 4
1985 (003) ret #262144
1986 (004) ret #0
1987 ',
1988 }, # mtp3_hopc
1989 {
1990 name => 'mtp3_hopc_gt',
1991 DLT => 'MTP2',
1992 aliases => ['hopc > 0x3aba'],
1993 unopt => '
1994 (000) ld [7]
1995 (001) and #0xc0ff0f
1996 (002) jgt #0x80ae0e jt 3 jf 4
1997 (003) ret #262144
1998 (004) ret #0
1999 ',
2000 }, # mtp3_hopc_gt
2001 {
2002 name => 'mtp3_hopc_ge',
2003 DLT => 'MTP2',
2004 aliases => ['hopc >= 0x3aba'],
2005 unopt => '
2006 (000) ld [7]
2007 (001) and #0xc0ff0f
2008 (002) jge #0x80ae0e jt 3 jf 4
2009 (003) ret #262144
2010 (004) ret #0
2011 ',
2012 }, # mtp3_hopc_ge
2013 {
2014 name => 'mtp3_hopc_le',
2015 DLT => 'MTP2',
2016 aliases => ['hopc <= 0x3aba'],
2017 unopt => '
2018 (000) ld [7]
2019 (001) and #0xc0ff0f
2020 (002) jgt #0x80ae0e jt 3 jf 4
2021 (003) ret #0
2022 (004) ret #262144
2023 ',
2024 }, # mtp3_hopc_le
2025 {
2026 name => 'mtp3_hopc_lt',
2027 DLT => 'MTP2',
2028 aliases => ['hopc < 0x3aba'],
2029 unopt => '
2030 (000) ld [7]
2031 (001) and #0xc0ff0f
2032 (002) jge #0x80ae0e jt 3 jf 4
2033 (003) ret #0
2034 (004) ret #262144
2035 ',
2036 }, # mtp3_hopc_lt
2037 {
2038 name => 'mtp3_hopc_ne',
2039 DLT => 'MTP2',
2040 aliases => ['hopc != 0x3aba'],
2041 unopt => '
2042 (000) ld [7]
2043 (001) and #0xc0ff0f
2044 (002) jeq #0x80ae0e jt 3 jf 4
2045 (003) ret #0
2046 (004) ret #262144
2047 ',
2048 }, # mtp3_hopc_ne
2049 {
2050 name => 'mtp3_hopc_nary',
2051 DLT => 'MTP2',
2052 aliases => ['hopc (9000 or 10000 or 9001)'],
2053 unopt => '
2054 (000) ld [7]
2055 (001) and #0xc0ff0f
2056 (002) jeq #0xca08 jt 9 jf 3
2057 (003) ld [7]
2058 (004) and #0xc0ff0f
2059 (005) jeq #0xc409 jt 9 jf 6
2060 (006) ld [7]
2061 (007) and #0xc0ff0f
2062 (008) jeq #0x40ca08 jt 9 jf 10
2063 (009) ret #262144
2064 (010) ret #0
2065 ',
2066 }, # mtp3_hopc_nary
2067 {
2068 name => 'mtp3_hsls',
2069 DLT => 'MTP2',
2070 aliases => [
2071 'hsls 5',
2072 'hsls = 5',
2073 'hsls == 5',
2074 'hsls (5)',
2075 'hsls (5 or 5)',
2076 ],
2077 opt => '
2078 (000) ldb [10]
2079 (001) and #0xf0
2080 (002) jeq #0x50 jt 3 jf 4
2081 (003) ret #262144
2082 (004) ret #0
2083 ',
2084 }, # mtp3_hsls
2085 {
2086 name => 'mtp3_hsls_gt',
2087 DLT => 'MTP2',
2088 aliases => ['hsls > 6'],
2089 unopt => '
2090 (000) ldb [10]
2091 (001) and #0xf0
2092 (002) jgt #0x60 jt 3 jf 4
2093 (003) ret #262144
2094 (004) ret #0
2095 ',
2096 }, # mtp3_hsls_gt
2097 {
2098 name => 'mtp3_hsls_ge',
2099 DLT => 'MTP2',
2100 aliases => ['hsls >= 7'],
2101 unopt => '
2102 (000) ldb [10]
2103 (001) and #0xf0
2104 (002) jge #0x70 jt 3 jf 4
2105 (003) ret #262144
2106 (004) ret #0
2107 ',
2108 }, # mtp3_hsls_ge
2109 {
2110 name => 'mtp3_hsls_le',
2111 DLT => 'MTP2',
2112 aliases => ['hsls <= 8'],
2113 unopt => '
2114 (000) ldb [10]
2115 (001) and #0xf0
2116 (002) jgt #0x80 jt 3 jf 4
2117 (003) ret #0
2118 (004) ret #262144
2119 ',
2120 }, # mtp3_hsls_le
2121 {
2122 name => 'mtp3_hsls_lt',
2123 DLT => 'MTP2',
2124 aliases => ['hsls < 9'],
2125 unopt => '
2126 (000) ldb [10]
2127 (001) and #0xf0
2128 (002) jge #0x90 jt 3 jf 4
2129 (003) ret #0
2130 (004) ret #262144
2131 ',
2132 }, # mtp3_hsls_lt
2133 {
2134 name => 'mtp3_hsls_ne',
2135 DLT => 'MTP2',
2136 aliases => ['hsls != 10'],
2137 unopt => '
2138 (000) ldb [10]
2139 (001) and #0xf0
2140 (002) jeq #0xa0 jt 3 jf 4
2141 (003) ret #0
2142 (004) ret #262144
2143 ',
2144 }, # mtp3_hsls_ne
2145 {
2146 name => 'mtp3_hsls_nary',
2147 DLT => 'MTP2',
2148 aliases => ['hsls (13 or 12 or 11)'],
2149 unopt => '
2150 (000) ldb [10]
2151 (001) and #0xf0
2152 (002) jeq #0xd0 jt 9 jf 3
2153 (003) ldb [10]
2154 (004) and #0xf0
2155 (005) jeq #0xc0 jt 9 jf 6
2156 (006) ldb [10]
2157 (007) and #0xf0
2158 (008) jeq #0xb0 jt 9 jf 10
2159 (009) ret #262144
2160 (010) ret #0
2161 ',
2162 }, # mtp3_hsls_nary
2163
2164 {
2165 name => 'atm_vpi',
2166 DLT => 'SUNATM',
2167 aliases => [
2168 'vpi 10',
2169 'vpi = 10',
2170 'vpi == 10',
2171 'vpi (10)',
2172 'vpi (10 or 10)',
2173 ],
2174 opt => '
2175 (000) ldb [1]
2176 (001) jeq #0xa jt 2 jf 3
2177 (002) ret #262144
2178 (003) ret #0
2179 ',
2180 }, # atm_vpi
2181 {
2182 name => 'atm_vpi_gt',
2183 DLT => 'SUNATM',
2184 aliases => ['vpi > 100'],
2185 unopt => '
2186 (000) ldb [1]
2187 (001) jgt #0x64 jt 2 jf 3
2188 (002) ret #262144
2189 (003) ret #0
2190 ',
2191 }, # atm_vpi_gt
2192 {
2193 name => 'atm_vpi_ge',
2194 DLT => 'SUNATM',
2195 aliases => ['vpi >= 101'],
2196 unopt => '
2197 (000) ldb [1]
2198 (001) jge #0x65 jt 2 jf 3
2199 (002) ret #262144
2200 (003) ret #0
2201 ',
2202 }, # atm_vpi_ge
2203 {
2204 name => 'atm_vpi_le',
2205 DLT => 'SUNATM',
2206 aliases => ['vpi <= 102'],
2207 unopt => '
2208 (000) ldb [1]
2209 (001) jgt #0x66 jt 2 jf 3
2210 (002) ret #0
2211 (003) ret #262144
2212 ',
2213 }, # atm_vpi_le
2214 {
2215 name => 'atm_vpi_lt',
2216 DLT => 'SUNATM',
2217 aliases => ['vpi < 103'],
2218 unopt => '
2219 (000) ldb [1]
2220 (001) jge #0x67 jt 2 jf 3
2221 (002) ret #0
2222 (003) ret #262144
2223 ',
2224 }, # atm_vpi_lt
2225 {
2226 name => 'atm_vpi_ne',
2227 DLT => 'SUNATM',
2228 aliases => ['vpi != 104'],
2229 unopt => '
2230 (000) ldb [1]
2231 (001) jeq #0x68 jt 2 jf 3
2232 (002) ret #0
2233 (003) ret #262144
2234 ',
2235 }, # atm_vpi_ne
2236 {
2237 name => 'atm_vpi_nary',
2238 DLT => 'SUNATM',
2239 aliases => ['vpi (105 or 0x7a or 0311)'],
2240 # The bytecode preserves the order of values, hence no aliases for the
2241 # permutations.
2242 opt => '
2243 (000) ldb [1]
2244 (001) jeq #0x69 jt 4 jf 2
2245 (002) jeq #0x7a jt 4 jf 3
2246 (003) jeq #0xc9 jt 4 jf 5
2247 (004) ret #262144
2248 (005) ret #0
2249 ',
2250 }, # atm_vpi_nary
2251 {
2252 name => 'atm_vci',
2253 DLT => 'SUNATM',
2254 aliases => [
2255 'vci 20',
2256 'vci = 20',
2257 'vci == 20',
2258 'vci (20)',
2259 'vci (20 or 20)',
2260 ],
2261 opt => '
2262 (000) ldh [2]
2263 (001) jeq #0x14 jt 2 jf 3
2264 (002) ret #262144
2265 (003) ret #0
2266 ',
2267 }, # atm_vci
2268 {
2269 name => 'atm_vci_gt',
2270 DLT => 'SUNATM',
2271 aliases => ['vci > 20001'],
2272 unopt => '
2273 (000) ldh [2]
2274 (001) jgt #0x4e21 jt 2 jf 3
2275 (002) ret #262144
2276 (003) ret #0
2277 ',
2278 }, # atm_vci_gt
2279 {
2280 name => 'atm_vci_ge',
2281 DLT => 'SUNATM',
2282 aliases => ['vci >= 20002'],
2283 unopt => '
2284 (000) ldh [2]
2285 (001) jge #0x4e22 jt 2 jf 3
2286 (002) ret #262144
2287 (003) ret #0
2288 ',
2289 }, # atm_vci_ge
2290 {
2291 name => 'atm_vci_le',
2292 DLT => 'SUNATM',
2293 aliases => ['vci <= 20003'],
2294 unopt => '
2295 (000) ldh [2]
2296 (001) jgt #0x4e23 jt 2 jf 3
2297 (002) ret #0
2298 (003) ret #262144
2299 ',
2300 }, # atm_vci_le
2301 {
2302 name => 'atm_vci_lt',
2303 DLT => 'SUNATM',
2304 aliases => ['vci < 20004'],
2305 unopt => '
2306 (000) ldh [2]
2307 (001) jge #0x4e24 jt 2 jf 3
2308 (002) ret #0
2309 (003) ret #262144
2310 ',
2311 }, # atm_vci_lt
2312 {
2313 name => 'atm_vci_ne',
2314 DLT => 'SUNATM',
2315 aliases => ['vci != 20005'],
2316 unopt => '
2317 (000) ldh [2]
2318 (001) jeq #0x4e25 jt 2 jf 3
2319 (002) ret #0
2320 (003) ret #262144
2321 ',
2322 }, # atm_vci_ne
2323 {
2324 name => 'atm_vci_nary',
2325 DLT => 'SUNATM',
2326 aliases => ['vci (10 or 0xdb or 0700)'],
2327 opt => '
2328 (000) ldh [2]
2329 (001) jeq #0xa jt 4 jf 2
2330 (002) jeq #0xdb jt 4 jf 3
2331 (003) jeq #0x1c0 jt 4 jf 5
2332 (004) ret #262144
2333 (005) ret #0
2334 ',
2335 }, # atm_vci_nary
2336 {
2337 name => 'atm_lane',
2338 DLT => 'SUNATM',
2339 aliases => ['lane'],
2340 opt => '
2341 (000) ldb [0]
2342 (001) and #0xf
2343 (002) jeq #0x1 jt 3 jf 4
2344 (003) ret #262144
2345 (004) ret #0
2346 ',
2347 }, # atm_lane
2348 {
2349 name => 'atm_oamf4sc',
2350 DLT => 'SUNATM',
2351 aliases => ['oamf4sc'],
2352 opt => '
2353 (000) ldb [1]
2354 (001) jeq #0x0 jt 2 jf 5
2355 (002) ldh [2]
2356 (003) jeq #0x3 jt 4 jf 5
2357 (004) ret #262144
2358 (005) ret #0
2359 ',
2360 }, # atm_oamf4sc
2361 {
2362 name => 'atm_oamf4ec',
2363 DLT => 'SUNATM',
2364 aliases => ['oamf4ec'],
2365 opt => '
2366 (000) ldb [1]
2367 (001) jeq #0x0 jt 2 jf 5
2368 (002) ldh [2]
2369 (003) jeq #0x4 jt 4 jf 5
2370 (004) ret #262144
2371 (005) ret #0
2372 ',
2373 }, # atm_oamf4ec
2374 {
2375 name => 'atm_oamf4',
2376 DLT => 'SUNATM',
2377 aliases => [
2378 'oamf4',
2379 'oam',
2380 ],
2381 opt => '
2382 (000) ldb [1]
2383 (001) jeq #0x0 jt 2 jf 6
2384 (002) ldh [2]
2385 (003) jeq #0x3 jt 5 jf 4
2386 (004) jeq #0x4 jt 5 jf 6
2387 (005) ret #262144
2388 (006) ret #0
2389 ',
2390 }, # atm_oamf4
2391 {
2392 name => 'atm_metac',
2393 DLT => 'SUNATM',
2394 aliases => ['metac'],
2395 opt => '
2396 (000) ldb [1]
2397 (001) jeq #0x0 jt 2 jf 5
2398 (002) ldh [2]
2399 (003) jeq #0x1 jt 4 jf 5
2400 (004) ret #262144
2401 (005) ret #0
2402 ',
2403 }, # atm_metac
2404 {
2405 name => 'atm_bcc',
2406 DLT => 'SUNATM',
2407 aliases => ['bcc'],
2408 opt => '
2409 (000) ldb [1]
2410 (001) jeq #0x0 jt 2 jf 5
2411 (002) ldh [2]
2412 (003) jeq #0x2 jt 4 jf 5
2413 (004) ret #262144
2414 (005) ret #0
2415 ',
2416 }, # atm_bcc
2417 {
2418 name => 'atm_sc',
2419 DLT => 'SUNATM',
2420 aliases => ['sc'],
2421 opt => '
2422 (000) ldb [1]
2423 (001) jeq #0x0 jt 2 jf 5
2424 (002) ldh [2]
2425 (003) jeq #0x5 jt 4 jf 5
2426 (004) ret #262144
2427 (005) ret #0
2428 ',
2429 }, # atm_sc
2430 {
2431 name => 'atm_ilmic',
2432 DLT => 'SUNATM',
2433 aliases => ['ilmic'],
2434 opt => '
2435 (000) ldb [1]
2436 (001) jeq #0x0 jt 2 jf 5
2437 (002) ldh [2]
2438 (003) jeq #0x10 jt 4 jf 5
2439 (004) ret #262144
2440 (005) ret #0
2441 ',
2442 }, # atm_ilmic
2443 {
2444 name => 'atm_connectmsg',
2445 DLT => 'SUNATM',
2446 aliases => ['connectmsg'],
2447 opt => '
2448 (000) ldb [1]
2449 (001) jeq #0x0 jt 2 jf 12
2450 (002) ldh [2]
2451 (003) jeq #0x5 jt 4 jf 12
2452 (004) ldb [9]
2453 (005) jeq #0x5a jt 11 jf 6
2454 (006) jeq #0x4d jt 11 jf 7
2455 (007) jeq #0xf jt 11 jf 8
2456 (008) jeq #0x7 jt 11 jf 9
2457 (009) jeq #0x5 jt 11 jf 10
2458 (010) jeq #0x2 jt 11 jf 12
2459 (011) ret #262144
2460 (012) ret #0
2461 ',
2462 }, # atm_connectmsg
2463 {
2464 name => 'atm_metaconnect',
2465 DLT => 'SUNATM',
2466 aliases => ['metaconnect'],
2467 opt => '
2468 (000) ldb [1]
2469 (001) jeq #0x0 jt 2 jf 11
2470 (002) ldh [2]
2471 (003) jeq #0x1 jt 4 jf 11
2472 (004) ldb [9]
2473 (005) jeq #0x5a jt 10 jf 6
2474 (006) jeq #0x4d jt 10 jf 7
2475 (007) jeq #0x7 jt 10 jf 8
2476 (008) jeq #0x5 jt 10 jf 9
2477 (009) jeq #0x2 jt 10 jf 11
2478 (010) ret #262144
2479 (011) ret #0
2480 ',
2481 }, # atm_metaconnect
2482
2483 # Do not permutate all possible aliases for "link", just the ones that
2484 # obviously make sense for the DLT.
2485 {
2486 name => 'arcnet_broadcast_multicast',
2487 DLT => 'ARCNET',
2488 aliases => [
2489 'broadcast',
2490 'multicast',
2491 'link broadcast',
2492 'link multicast',
2493 'link dst $00',
2494 ],
2495 unopt => '
2496 (000) ldb [1]
2497 (001) jeq #0x0 jt 2 jf 3
2498 (002) ret #262144
2499 (003) ret #0
2500 ',
2501 }, # arcnet_broadcast_multicast
2502 {
2503 name => 'arcnet_host',
2504 DLT => 'ARCNET',
2505 aliases => [
2506 'link host $0e',
2507 'link src or dst host $0e',
2508 'link src or dst $0e',
2509 'link host $e',
2510 'link src or dst host $e',
2511 'link src or dst $e',
2512 ],
2513 unopt => '
2514 (000) ldb [0]
2515 (001) jeq #0xe jt 4 jf 2
2516 (002) ldb [1]
2517 (003) jeq #0xe jt 4 jf 5
2518 (004) ret #262144
2519 (005) ret #0
2520 ',
2521 }, # arcnet_host
2522 {
2523 name => 'arcnet_src_host',
2524 DLT => 'ARCNET',
2525 aliases => [
2526 'link src host $8c',
2527 'link src $8c',
2528 ],
2529 unopt => '
2530 (000) ldb [0]
2531 (001) jeq #0x8c jt 2 jf 3
2532 (002) ret #262144
2533 (003) ret #0
2534 ',
2535 }, # arcnet_src_host
2536 {
2537 name => 'arcnet_dst_host',
2538 DLT => 'ARCNET',
2539 aliases => [
2540 'link dst host $a4',
2541 'link dst $a4',
2542 ],
2543 unopt => '
2544 (000) ldb [1]
2545 (001) jeq #0xa4 jt 2 jf 3
2546 (002) ret #262144
2547 (003) ret #0
2548 ',
2549 }, # arcnet_dst_host
2550 {
2551 name => 'fddi_broadcast',
2552 DLT => 'FDDI',
2553 aliases => [
2554 'broadcast',
2555 'fddi broadcast',
2556 'link broadcast',
2557 ],
2558 unopt => '
2559 (000) ld [3]
2560 (001) jeq #0xffffffff jt 2 jf 5
2561 (002) ldh [1]
2562 (003) jeq #0xffff jt 4 jf 5
2563 (004) ret #262144
2564 (005) ret #0
2565 ',
2566 }, # fddi_broadcast
2567 {
2568 name => 'fddi_multicast',
2569 DLT => 'FDDI',
2570 aliases => [
2571 'multicast',
2572 'fddi multicast',
2573 'link multicast',
2574 ],
2575 unopt => '
2576 (000) ldb [1]
2577 (001) jset #0x1 jt 2 jf 3
2578 (002) ret #262144
2579 (003) ret #0
2580 ',
2581 }, # fddi_multicast
2582 {
2583 name => 'ieee802_broadcast',
2584 DLT => 'IEEE802',
2585 aliases => [
2586 'broadcast',
2587 'tr broadcast',
2588 'link broadcast',
2589 ],
2590 unopt => '
2591 (000) ld [4]
2592 (001) jeq #0xffffffff jt 2 jf 5
2593 (002) ldh [2]
2594 (003) jeq #0xffff jt 4 jf 5
2595 (004) ret #262144
2596 (005) ret #0
2597 ',
2598 }, # ieee802_broadcast
2599 {
2600 name => 'ieee802_multicast',
2601 DLT => 'IEEE802',
2602 aliases => [
2603 'multicast',
2604 'tr multicast',
2605 'link multicast',
2606 ],
2607 unopt => '
2608 (000) ldb [2]
2609 (001) jset #0x1 jt 2 jf 3
2610 (002) ret #262144
2611 (003) ret #0
2612 ',
2613 }, # ieee802_multicast
2614 {
2615 name => 'ieee802_11_broadcast',
2616 DLT => 'IEEE802_11',
2617 aliases => [
2618 'broadcast',
2619 'wlan broadcast',
2620 'ether broadcast',
2621 'link broadcast',
2622 ],
2623 opt => '
2624 (000) ldb [0]
2625 (001) jset #0x4 jt 14 jf 2
2626 (002) jset #0x8 jt 3 jf 9
2627 (003) ldb [1]
2628 (004) jset #0x1 jt 5 jf 9
2629 (005) ld [18]
2630 (006) jeq #0xffffffff jt 7 jf 14
2631 (007) ldh [16]
2632 (008) jeq #0xffff jt 13 jf 14
2633 (009) ld [6]
2634 (010) jeq #0xffffffff jt 11 jf 14
2635 (011) ldh [4]
2636 (012) jeq #0xffff jt 13 jf 14
2637 (013) ret #262144
2638 (014) ret #0
2639 ',
2640 }, # ieee802_11_broadcast
2641 {
2642 name => 'ieee802_11_multicast',
2643 DLT => 'IEEE802_11',
2644 aliases => [
2645 'multicast',
2646 'wlan multicast',
2647 'ether multicast',
2648 'link multicast',
2649 ],
2650 opt => '
2651 (000) ldb [0]
2652 (001) jset #0x4 jt 10 jf 2
2653 (002) jset #0x8 jt 3 jf 7
2654 (003) ldb [1]
2655 (004) jset #0x1 jt 5 jf 7
2656 (005) ldb [16]
2657 (006) jset #0x1 jt 9 jf 10
2658 (007) ldb [4]
2659 (008) jset #0x1 jt 9 jf 10
2660 (009) ret #262144
2661 (010) ret #0
2662 ',
2663 }, # ieee802_11_multicast
2664 {
2665 name => 'ip_over_fc_broadcast',
2666 DLT => 'IP_OVER_FC',
2667 aliases => [
2668 'broadcast',
2669 'link broadcast',
2670 ],
2671 unopt => '
2672 (000) ld [4]
2673 (001) jeq #0xffffffff jt 2 jf 5
2674 (002) ldh [2]
2675 (003) jeq #0xffff jt 4 jf 5
2676 (004) ret #262144
2677 (005) ret #0
2678 ',
2679 }, # ip_over_fc_broadcast
2680 {
2681 name => 'ip_over_fc_multicast',
2682 DLT => 'IP_OVER_FC',
2683 aliases => [
2684 'multicast',
2685 'link multicast',
2686 ],
2687 opt => '
2688 (000) ldb [2]
2689 (001) jset #0x1 jt 2 jf 3
2690 (002) ret #262144
2691 (003) ret #0
2692 ',
2693 }, # ip_over_fc_multicast
2694 {
2695 name => 'atm_multicast',
2696 DLT => 'SUNATM',
2697 aliases => ['lane and multicast'],
2698 opt => '
2699 (000) ldb [0]
2700 (001) and #0xf
2701 (002) jeq #0x1 jt 3 jf 8
2702 (003) ldh [4]
2703 (004) jeq #0xff00 jt 8 jf 5
2704 (005) ldb [6]
2705 (006) jset #0x1 jt 7 jf 8
2706 (007) ret #262144
2707 (008) ret #0
2708 ',
2709 }, # atm_multicast
2710
2711 {
2712 name => 'ether_broadcast',
2713 DLT => 'EN10MB',
2714 snaplen => 16000,
2715 aliases => [
2716 'broadcast',
2717 'ether broadcast',
2718 'link broadcast',
2719 ],
2720 opt => '
2721 (000) ld [2]
2722 (001) jeq #0xffffffff jt 2 jf 5
2723 (002) ldh [0]
2724 (003) jeq #0xffff jt 4 jf 5
2725 (004) ret #16000
2726 (005) ret #0
2727 ',
2728 }, # ether_broadcast
2729 {
2730 name => 'ether_multicast',
2731 DLT => 'EN10MB',
2732 snaplen => 16000,
2733 aliases => [
2734 'multicast',
2735 'ether multicast',
2736 'link multicast',
2737 ],
2738 opt => '
2739 (000) ldb [0]
2740 (001) jset #0x1 jt 2 jf 3
2741 (002) ret #16000
2742 (003) ret #0
2743 ',
2744 }, # ether_multicast
2745 {
2746 name => 'ether_host_addr',
2747 DLT => 'EN10MB',
2748 aliases => [
2749 'ether host ab:cd:ef:0:0:1',
2750 'ether src or dst host ab.CD.ef.0.0.1',
2751 'ether src or dst Ab.cD.ef.00.0.01',
2752 ],
2753 opt => '
2754 (000) ld [8]
2755 (001) jeq #0xef000001 jt 2 jf 4
2756 (002) ldh [6]
2757 (003) jeq #0xabcd jt 8 jf 4
2758 (004) ld [2]
2759 (005) jeq #0xef000001 jt 6 jf 9
2760 (006) ldh [0]
2761 (007) jeq #0xabcd jt 8 jf 9
2762 (008) ret #262144
2763 (009) ret #0
2764 ',
2765 }, # ether_host_addr
2766 {
2767 name => 'ether_host_name',
2768 skip => skip_no_ethers(),
2769 DLT => 'EN10MB',
2770 aliases => [
2771 'ether host eth-noipv4-noipv6.host123.libpcap.test',
2772 'ether src or dst eth-noipv4-noipv6.host123.libpcap.test',
2773 'ether src or dst host eth-noipv4-noipv6.host123.libpcap.test',
2774 ],
2775 opt => '
2776 (000) ld [8]
2777 (001) jeq #0x400140e jt 2 jf 4
2778 (002) ldh [6]
2779 (003) jeq #0xaa00 jt 8 jf 4
2780 (004) ld [2]
2781 (005) jeq #0x400140e jt 6 jf 9
2782 (006) ldh [0]
2783 (007) jeq #0xaa00 jt 8 jf 9
2784 (008) ret #262144
2785 (009) ret #0
2786 ',
2787 }, # ether_host_name
2788 {
2789 name => 'ether_host_NAME',
2790 skip => skip_no_ethers_casecmp(),
2791 DLT => 'EN10MB',
2792 aliases => [
2793 'ether host ETH-NOIPV4-NOIPV6.HOST123.LIBPCAP.TEST',
2794 'ether src or dst ETH-NOIPV4-NOIPV6.HOST123.LIBPCAP.TEST',
2795 'ether src or dst host ETH-NOIPV4-NOIPV6.HOST123.LIBPCAP.TEST',
2796 ],
2797 opt => '
2798 (000) ld [8]
2799 (001) jeq #0x400140e jt 2 jf 4
2800 (002) ldh [6]
2801 (003) jeq #0xaa00 jt 8 jf 4
2802 (004) ld [2]
2803 (005) jeq #0x400140e jt 6 jf 9
2804 (006) ldh [0]
2805 (007) jeq #0xaa00 jt 8 jf 9
2806 (008) ret #262144
2807 (009) ret #0
2808 ',
2809 }, # ether_host_NAME
2810 {
2811 name => 'ether_src_host_addr',
2812 DLT => 'EN10MB',
2813 aliases => [
2814 'ether src host ab-cd-ef-00-00-02',
2815 'ether src ab.cd.ef.00.00.02',
2816 ],
2817 opt => '
2818 (000) ld [8]
2819 (001) jeq #0xef000002 jt 2 jf 5
2820 (002) ldh [6]
2821 (003) jeq #0xabcd jt 4 jf 5
2822 (004) ret #262144
2823 (005) ret #0
2824 ',
2825 }, # ether_src_host_addr
2826 {
2827 name => 'ether_src_host_name',
2828 skip => skip_no_ethers(),
2829 DLT => 'EN10MB',
2830 aliases => [
2831 'ether src host eth-noipv4-noipv6.host123.libpcap.test',
2832 'ether src eth-noipv4-noipv6.host123.libpcap.test',
2833 ],
2834 opt => '
2835 (000) ld [8]
2836 (001) jeq #0x400140e jt 2 jf 5
2837 (002) ldh [6]
2838 (003) jeq #0xaa00 jt 4 jf 5
2839 (004) ret #262144
2840 (005) ret #0
2841 ',
2842 }, # ether_src_host_name
2843 {
2844 name => 'ether_src_host_NAME',
2845 skip => skip_no_ethers_casecmp(),
2846 DLT => 'EN10MB',
2847 aliases => [
2848 'ether src host ETH-NOIPV4-NOIPV6.HOST123.LIBPCAP.TEST',
2849 'ether src ETH-NOIPV4-NOIPV6.HOST123.LIBPCAP.TEST',
2850 ],
2851 opt => '
2852 (000) ld [8]
2853 (001) jeq #0x400140e jt 2 jf 5
2854 (002) ldh [6]
2855 (003) jeq #0xaa00 jt 4 jf 5
2856 (004) ret #262144
2857 (005) ret #0
2858 ',
2859 }, # ether_src_host_NAME
2860 {
2861 name => 'ether_dst_host_addr',
2862 DLT => 'EN10MB',
2863 aliases => [
2864 'ether dst host abcd.ef00.0003',
2865 'ether dst abcdef000003',
2866 ],
2867 opt => '
2868 (000) ld [2]
2869 (001) jeq #0xef000003 jt 2 jf 5
2870 (002) ldh [0]
2871 (003) jeq #0xabcd jt 4 jf 5
2872 (004) ret #262144
2873 (005) ret #0
2874 ',
2875 }, # ether_dst_host_addr
2876 {
2877 name => 'ether_dst_host_name',
2878 skip => skip_no_ethers(),
2879 DLT => 'EN10MB',
2880 aliases => [
2881 'ether dst host eth-noipv4-noipv6.host123.libpcap.test',
2882 'ether dst eth-noipv4-noipv6.host123.libpcap.test',
2883 ],
2884 opt => '
2885 (000) ld [2]
2886 (001) jeq #0x400140e jt 2 jf 5
2887 (002) ldh [0]
2888 (003) jeq #0xaa00 jt 4 jf 5
2889 (004) ret #262144
2890 (005) ret #0
2891 ',
2892 }, # ether_dst_host_name
2893 {
2894 name => 'ether_dst_host_NAME',
2895 skip => skip_no_ethers_casecmp(),
2896 DLT => 'EN10MB',
2897 aliases => [
2898 'ether dst host ETH-NOIPV4-NOIPV6.HOST123.LIBPCAP.TEST',
2899 'ether dst ETH-NOIPV4-NOIPV6.HOST123.LIBPCAP.TEST',
2900 ],
2901 opt => '
2902 (000) ld [2]
2903 (001) jeq #0x400140e jt 2 jf 5
2904 (002) ldh [0]
2905 (003) jeq #0xaa00 jt 4 jf 5
2906 (004) ret #262144
2907 (005) ret #0
2908 ',
2909 }, # ether_dst_host_NAME
2910
2911 # 3 DLTs lead to gen_ether_linktype(), which implements 7 code paths,
2912 # let's test these for DLT_EN10MB only.
2913 {
2914 name => 'ether_proto_aarp',
2915 DLT => 'EN10MB',
2916 aliases => [
2917 'ether proto \aarp',
2918 'aarp',
2919 ],
2920 opt => '
2921 (000) ldh [12]
2922 (001) jeq #0x80f3 jt 7 jf 2
2923 (002) jgt #0x5dc jt 8 jf 3
2924 (003) ld [18]
2925 (004) jeq #0x80f3 jt 5 jf 8
2926 (005) ld [14]
2927 (006) jeq #0xaaaa0300 jt 7 jf 8
2928 (007) ret #262144
2929 (008) ret #0
2930 ',
2931 }, # ether_proto_aarp
2932 {
2933 name => 'ether_proto_arp',
2934 DLT => 'EN10MB',
2935 aliases => [
2936 'ether proto \arp',
2937 'arp',
2938 ],
2939 unopt => '
2940 (000) ldh [12]
2941 (001) jeq #0x806 jt 2 jf 3
2942 (002) ret #262144
2943 (003) ret #0
2944 ',
2945 }, # ether_proto_arp
2946 {
2947 name => 'ether_proto_atalk',
2948 DLT => 'EN10MB',
2949 aliases => [
2950 'ether proto \atalk',
2951 'atalk',
2952 ],
2953 opt => '
2954 (000) ldh [12]
2955 (001) jeq #0x809b jt 7 jf 2
2956 (002) jgt #0x5dc jt 8 jf 3
2957 (003) ld [18]
2958 (004) jeq #0x7809b jt 5 jf 8
2959 (005) ld [14]
2960 (006) jeq #0xaaaa0308 jt 7 jf 8
2961 (007) ret #262144
2962 (008) ret #0
2963 ',
2964 }, # ether_proto_atalk
2965 {
2966 name => 'ether_proto_decnet',
2967 DLT => 'EN10MB',
2968 aliases => [
2969 'ether proto \decnet',
2970 'decnet',
2971 ],
2972 unopt => '
2973 (000) ldh [12]
2974 (001) jeq #0x6003 jt 2 jf 3
2975 (002) ret #262144
2976 (003) ret #0
2977 ',
2978 }, # ether_proto_decnet
2979 {
2980 name => 'ether_proto_ip',
2981 DLT => 'EN10MB',
2982 # gen_ether_linktype() default case
2983 aliases => [
2984 'ether proto \ip',
2985 'ip',
2986 ],
2987 unopt => '
2988 (000) ldh [12]
2989 (001) jeq #0x800 jt 2 jf 3
2990 (002) ret #262144
2991 (003) ret #0
2992 ',
2993 }, # ether_proto_ip
2994 {
2995 name => 'ether_proto_6',
2996 DLT => 'EN10MB',
2997 aliases => ['ether proto 6'], # gen_ether_linktype() LLCSAP_IP
2998 unopt => '
2999 (000) ldh [12]
3000 (001) jgt #0x5dc jt 5 jf 2
3001 (002) ldh [14]
3002 (003) jeq #0x606 jt 4 jf 5
3003 (004) ret #262144
3004 (005) ret #0
3005 ',
3006 }, # ether_proto_6
3007 {
3008 name => 'ether_proto_ip6',
3009 DLT => 'EN10MB',
3010 skip => skip_config_undef ('INET6'),
3011 aliases => ['ether proto \ip6'],
3012 unopt => '
3013 (000) ldh [12]
3014 (001) jeq #0x86dd jt 2 jf 3
3015 (002) ret #262144
3016 (003) ret #0
3017 ',
3018 }, # ether_proto_ip6
3019 {
3020 name => 'ip6',
3021 DLT => 'EN10MB',
3022 aliases => ['ip6'],
3023 unopt => '
3024 (000) ldh [12]
3025 (001) jeq #0x86dd jt 2 jf 3
3026 (002) ret #262144
3027 (003) ret #0
3028 ',
3029 }, # ip6
3030 {
3031 name => 'ether_proto_ipx',
3032 DLT => 'EN10MB',
3033 aliases => [
3034 'ether proto \ipx',
3035 'ipx',
3036 ],
3037 opt => '
3038 (000) ldh [12]
3039 (001) jeq #0x8137 jt 11 jf 2
3040 (002) jgt #0x5dc jt 12 jf 3
3041 (003) ld [18]
3042 (004) jeq #0x8137 jt 5 jf 7
3043 (005) ld [14]
3044 (006) jeq #0xaaaa0300 jt 11 jf 7
3045 (007) ldb [14]
3046 (008) jeq #0xe0 jt 11 jf 9
3047 (009) ldh [14]
3048 (010) jeq #0xffff jt 11 jf 12
3049 (011) ret #262144
3050 (012) ret #0
3051 ',
3052 }, # ether_proto_ipx
3053 {
3054 name => 'ether_proto_iso',
3055 DLT => 'EN10MB',
3056 aliases => [
3057 'ether proto \iso',
3058 'iso',
3059 ],
3060 unopt => '
3061 (000) ldh [12]
3062 (001) jgt #0x5dc jt 5 jf 2
3063 (002) ldh [14]
3064 (003) jeq #0xfefe jt 4 jf 5
3065 (004) ret #262144
3066 (005) ret #0
3067 ',
3068 }, # ether_proto_iso
3069 {
3070 name => 'ether_proto_lat',
3071 DLT => 'EN10MB',
3072 aliases => [
3073 'ether proto \lat',
3074 'lat',
3075 ],
3076 unopt => '
3077 (000) ldh [12]
3078 (001) jeq #0x6004 jt 2 jf 3
3079 (002) ret #262144
3080 (003) ret #0
3081 ',
3082 }, # ether_proto_lat
3083 {
3084 name => 'ether_proto_loopback',
3085 DLT => 'EN10MB',
3086 # No backslash escaping and no alias (the identifier is not a keyword).
3087 aliases => ['ether proto loopback'],
3088 unopt => '
3089 (000) ldh [12]
3090 (001) jeq #0x9000 jt 2 jf 3
3091 (002) ret #262144
3092 (003) ret #0
3093 ',
3094 }, # ether_proto_loopback
3095 {
3096 name => 'ether_proto_mopdl',
3097 DLT => 'EN10MB',
3098 aliases => [
3099 'ether proto \mopdl',
3100 'mopdl',
3101 ],
3102 unopt => '
3103 (000) ldh [12]
3104 (001) jeq #0x6001 jt 2 jf 3
3105 (002) ret #262144
3106 (003) ret #0
3107 ',
3108 }, # ether_proto_mopdl
3109 {
3110 name => 'ether_proto_moprc',
3111 DLT => 'EN10MB',
3112 aliases => [
3113 'ether proto \moprc',
3114 'moprc',
3115 ],
3116 unopt => '
3117 (000) ldh [12]
3118 (001) jeq #0x6002 jt 2 jf 3
3119 (002) ret #262144
3120 (003) ret #0
3121 ',
3122 }, # ether_proto_moprc
3123 {
3124 name => 'ether_proto_netbeui',
3125 DLT => 'EN10MB',
3126 aliases => [
3127 'ether proto \netbeui',
3128 'netbeui',
3129 ],
3130 unopt => '
3131 (000) ldh [12]
3132 (001) jgt #0x5dc jt 5 jf 2
3133 (002) ldh [14]
3134 (003) jeq #0xf0f0 jt 4 jf 5
3135 (004) ret #262144
3136 (005) ret #0
3137 ',
3138 }, # ether_proto_netbeui
3139 {
3140 name => 'ether_proto_rarp',
3141 DLT => 'EN10MB',
3142 aliases => [
3143 'ether proto \rarp',
3144 'rarp',
3145 ],
3146 unopt => '
3147 (000) ldh [12]
3148 (001) jeq #0x8035 jt 2 jf 3
3149 (002) ret #262144
3150 (003) ret #0
3151 ',
3152 }, # ether_proto_rarp
3153 {
3154 name => 'ether_proto_sca',
3155 DLT => 'EN10MB',
3156 aliases => [
3157 'ether proto \sca',
3158 'sca',
3159 ],
3160 unopt => '
3161 (000) ldh [12]
3162 (001) jeq #0x6007 jt 2 jf 3
3163 (002) ret #262144
3164 (003) ret #0
3165 ',
3166 }, # ether_proto_sca
3167 {
3168 name => 'ether_proto_stp',
3169 DLT => 'EN10MB',
3170 aliases => [
3171 'ether proto \stp',
3172 'stp',
3173 ],
3174 opt => '
3175 (000) ldh [12]
3176 (001) jgt #0x5dc jt 5 jf 2
3177 (002) ldb [14]
3178 (003) jeq #0x42 jt 4 jf 5
3179 (004) ret #262144
3180 (005) ret #0
3181 ',
3182 }, # ether_proto_stp
3183
3184 # The complete cartesian product of all DLTs and all link-layer protocol
3185 # numbers in gen_linktype() is not a practicable test space. Try testing
3186 # all unique code paths and eliminate/coalesce code points as necessary.
3187 {
3188 name => 'link_proto_ip_NETANALYZER',
3189 DLT => 'NETANALYZER',
3190 aliases => ['link proto \ip'],
3191 unopt => '
3192 (000) ldh [16]
3193 (001) jeq #0x800 jt 2 jf 3
3194 (002) ret #262144
3195 (003) ret #0
3196 ',
3197 }, # link_proto_ip_NETANALYZER
3198 {
3199 name => 'link_proto_ip_NETANALYZER_TRANSPARENT',
3200 DLT => 'NETANALYZER_TRANSPARENT',
3201 aliases => ['link proto \ip'],
3202 unopt => '
3203 (000) ldh [24]
3204 (001) jeq #0x800 jt 2 jf 3
3205 (002) ret #262144
3206 (003) ret #0
3207 ',
3208 }, # link_proto_ip_NETANALYZER_TRANSPARENT
3209 {
3210 name => 'link_proto_ip_C_HDLC',
3211 DLT => 'C_HDLC',
3212 aliases => ['link proto \ip'],
3213 unopt => '
3214 (000) ldh [2]
3215 (001) jeq #0x800 jt 2 jf 3
3216 (002) ret #262144
3217 (003) ret #0
3218 ',
3219 }, # link_proto_ip_C_HDLC
3220 {
3221 name => 'link_proto_iso_C_HDLC',
3222 DLT => 'C_HDLC',
3223 aliases => ['link proto \iso'],
3224 unopt => '
3225 (000) ldh [2]
3226 (001) jeq #0xfefe jt 2 jf 3
3227 (002) ret #262144
3228 (003) ret #0
3229 ',
3230 }, # link_proto_iso_C_HDLC
3231 {
3232 name => 'link_proto_ip_IEEE802_11',
3233 DLT => 'IEEE802_11',
3234 aliases => ['link proto \ip'],
3235 unopt => '
3236 (000) ldx #0x0
3237 (001) txa
3238 (002) add #24
3239 (003) st M[0]
3240 (004) ldb [x + 0]
3241 (005) jset #0x8 jt 6 jf 11
3242 (006) jset #0x4 jt 11 jf 7
3243 (007) jset #0x80 jt 8 jf 11
3244 (008) ld M[0]
3245 (009) add #2
3246 (010) st M[0]
3247 (011) ldb [0]
3248 (012) and #0xc
3249 (013) jeq #0x8 jt 14 jf 18
3250 (014) ldx M[0]
3251 (015) ldh [x + 6]
3252 (016) jeq #0x800 jt 17 jf 18
3253 (017) ret #262144
3254 (018) ret #0
3255 ',
3256 }, # link_proto_ip_IEEE802_11
3257 {
3258 name => 'link_proto_ip_PRISM_HEADER',
3259 DLT => 'PRISM_HEADER',
3260 aliases => ['link proto \ip'],
3261 unopt => '
3262 (000) ld [0]
3263 (001) and #0xfffff000
3264 (002) jeq #0x80211000 jt 3 jf 5
3265 (003) ld [4]
3266 (004) ja 6
3267 (005) ld #0x90
3268 (006) st M[0]
3269 (007) tax
3270 (008) txa
3271 (009) add #24
3272 (010) st M[1]
3273 (011) ldb [x + 0]
3274 (012) jset #0x8 jt 13 jf 18
3275 (013) jset #0x4 jt 18 jf 14
3276 (014) jset #0x80 jt 15 jf 18
3277 (015) ld M[1]
3278 (016) add #2
3279 (017) st M[1]
3280 (018) ldx M[0]
3281 (019) ldb [x + 0]
3282 (020) and #0xc
3283 (021) jeq #0x8 jt 22 jf 26
3284 (022) ldx M[1]
3285 (023) ldh [x + 6]
3286 (024) jeq #0x800 jt 25 jf 26
3287 (025) ret #262144
3288 (026) ret #0
3289 ',
3290 }, # link_proto_ip_PRISM_HEADER
3291 {
3292 name => 'link_proto_ip_IEEE802_11_RADIO',
3293 DLT => 'IEEE802_11_RADIO',
3294 aliases => ['link proto \ip'],
3295 unopt => '
3296 (000) ldb [3]
3297 (001) lsh #8
3298 (002) tax
3299 (003) ldb [2]
3300 (004) or x
3301 (005) st M[0]
3302 (006) tax
3303 (007) txa
3304 (008) add #24
3305 (009) st M[1]
3306 (010) ldb [x + 0]
3307 (011) jset #0x8 jt 12 jf 29
3308 (012) jset #0x4 jt 29 jf 13
3309 (013) jset #0x80 jt 14 jf 17
3310 (014) ld M[1]
3311 (015) add #2
3312 (016) st M[1]
3313 (017) ld [4]
3314 (018) jset #0x2000000 jt 19 jf 29
3315 (019) jset #0x80 jt 29 jf 20
3316 (020) jset #0x1000000 jt 21 jf 23
3317 (021) ldb [16]
3318 (022) jset #0x20 jt 25 jf 29
3319 (023) ldb [8]
3320 (024) jset #0x20 jt 25 jf 29
3321 (025) ld M[1]
3322 (026) add #3
3323 (027) and #0xfffffffc
3324 (028) st M[1]
3325 (029) ldx M[0]
3326 (030) ldb [x + 0]
3327 (031) and #0xc
3328 (032) jeq #0x8 jt 33 jf 37
3329 (033) ldx M[1]
3330 (034) ldh [x + 6]
3331 (035) jeq #0x800 jt 36 jf 37
3332 (036) ret #262144
3333 (037) ret #0
3334 ',
3335 }, # link_proto_ip_IEEE802_11_RADIO
3336 {
3337 name => 'link_proto_ip_IEEE802_11_RADIO_AVS',
3338 DLT => 'IEEE802_11_RADIO_AVS',
3339 aliases => ['link proto \ip'],
3340 unopt => '
3341 (000) ld [4]
3342 (001) st M[0]
3343 (002) tax
3344 (003) txa
3345 (004) add #24
3346 (005) st M[1]
3347 (006) ldb [x + 0]
3348 (007) jset #0x8 jt 8 jf 13
3349 (008) jset #0x4 jt 13 jf 9
3350 (009) jset #0x80 jt 10 jf 13
3351 (010) ld M[1]
3352 (011) add #2
3353 (012) st M[1]
3354 (013) ldx M[0]
3355 (014) ldb [x + 0]
3356 (015) and #0xc
3357 (016) jeq #0x8 jt 17 jf 21
3358 (017) ldx M[1]
3359 (018) ldh [x + 6]
3360 (019) jeq #0x800 jt 20 jf 21
3361 (020) ret #262144
3362 (021) ret #0
3363 ',
3364 }, # link_proto_ip_IEEE802_11_RADIO_AVS
3365 {
3366 name => 'link_proto_ip_PPI',
3367 DLT => 'PPI',
3368 aliases => ['link proto \ip'],
3369 unopt => '
3370 (000) ld [4]
3371 (001) jeq #0x69000000 jt 2 jf 27
3372 (002) ldb [3]
3373 (003) lsh #8
3374 (004) tax
3375 (005) ldb [2]
3376 (006) or x
3377 (007) st M[0]
3378 (008) tax
3379 (009) txa
3380 (010) add #24
3381 (011) st M[1]
3382 (012) ldb [x + 0]
3383 (013) jset #0x8 jt 14 jf 19
3384 (014) jset #0x4 jt 19 jf 15
3385 (015) jset #0x80 jt 16 jf 19
3386 (016) ld M[1]
3387 (017) add #2
3388 (018) st M[1]
3389 (019) ldx M[0]
3390 (020) ldb [x + 0]
3391 (021) and #0xc
3392 (022) jeq #0x8 jt 23 jf 27
3393 (023) ldx M[1]
3394 (024) ldh [x + 6]
3395 (025) jeq #0x800 jt 26 jf 27
3396 (026) ret #262144
3397 (027) ret #0
3398 ',
3399 }, # link_proto_ip_PPI
3400 {
3401 name => 'link_proto_ip_FDDI',
3402 DLT => 'FDDI',
3403 aliases => ['link proto \ip'],
3404 unopt => '
3405 (000) ldh [19]
3406 (001) jeq #0x800 jt 2 jf 3
3407 (002) ret #262144
3408 (003) ret #0
3409 ',
3410 }, # link_proto_ip_FDDI
3411 # 11 DLTs lead to gen_llc_linktype(), which implements 6 code paths,
3412 # let's test these for DLT_IEEE802 only.
3413 {
3414 name => 'link_proto_ip_IEEE802',
3415 DLT => 'IEEE802',
3416 aliases => ['link proto \ip'], # gen_llc_linktype() default case
3417 unopt => '
3418 (000) ldh [20]
3419 (001) jeq #0x800 jt 2 jf 3
3420 (002) ret #262144
3421 (003) ret #0
3422 ',
3423 }, # link_proto_ip_IEEE802
3424 {
3425 name => 'link_proto_6_IEEE802',
3426 DLT => 'IEEE802',
3427 aliases => ['link proto 6'], # gen_llc_linktype() LLCSAP_IP
3428 unopt => '
3429 (000) ldh [14]
3430 (001) jeq #0x606 jt 2 jf 3
3431 (002) ret #262144
3432 (003) ret #0
3433 ',
3434 }, # link_proto_6_IEEE802
3435 {
3436 name => 'link_proto_iso_IEEE802',
3437 DLT => 'IEEE802',
3438 aliases => ['link proto \iso'],
3439 unopt => '
3440 (000) ldh [14]
3441 (001) jeq #0xfefe jt 2 jf 3
3442 (002) ret #262144
3443 (003) ret #0
3444 ',
3445 }, # link_proto_iso_IEEE802
3446 {
3447 name => 'link_proto_netbeui_IEEE802',
3448 DLT => 'IEEE802',
3449 aliases => ['link proto \netbeui'],
3450 unopt => '
3451 (000) ldh [14]
3452 (001) jeq #0xf0f0 jt 2 jf 3
3453 (002) ret #262144
3454 (003) ret #0
3455 ',
3456 }, # link_proto_netbeui_IEEE802
3457 {
3458 name => 'link_proto_ipx_IEEE802',
3459 DLT => 'IEEE802',
3460 aliases => ['link proto \ipx'],
3461 unopt => '
3462 (000) ldb [14]
3463 (001) jeq #0xe0 jt 2 jf 3
3464 (002) ret #262144
3465 (003) ret #0
3466 ',
3467 }, # link_proto_ipx_IEEE802
3468 {
3469 name => 'link_proto_atalk_IEEE802',
3470 DLT => 'IEEE802',
3471 aliases => ['link proto \atalk'],
3472 unopt => '
3473 (000) ld [18]
3474 (001) jeq #0x7809b jt 2 jf 5
3475 (002) ld [14]
3476 (003) jeq #0xaaaa0308 jt 4 jf 5
3477 (004) ret #262144
3478 (005) ret #0
3479 ',
3480 }, # link_proto_atalk_IEEE802
3481 {
3482 name => 'link_proto_aarp_IEEE802',
3483 DLT => 'IEEE802',
3484 aliases => ['link proto \aarp'],
3485 unopt => '
3486 (000) ldh [20]
3487 (001) jeq #0x80f3 jt 2 jf 3
3488 (002) ret #262144
3489 (003) ret #0
3490 ',
3491 }, # link_proto_aarp_IEEE802
3492 {
3493 name => 'link_proto_stp_IEEE802',
3494 DLT => 'IEEE802',
3495 aliases => ['link proto \stp'],
3496 unopt => '
3497 (000) ldb [14]
3498 (001) jeq #0x42 jt 2 jf 3
3499 (002) ret #262144
3500 (003) ret #0
3501 ',
3502 }, # link_proto_stp_IEEE802
3503 {
3504 name => 'link_proto_ip_ATM_RFC1483',
3505 DLT => 'ATM_RFC1483',
3506 aliases => ['link proto \ip'],
3507 unopt => '
3508 (000) ldh [6]
3509 (001) jeq #0x800 jt 2 jf 3
3510 (002) ret #262144
3511 (003) ret #0
3512 ',
3513 }, # link_proto_ip_ATM_RFC1483
3514 {
3515 name => 'link_proto_ip_ATM_CLIP',
3516 DLT => 'ATM_CLIP',
3517 aliases => ['link proto \ip'],
3518 unopt => '
3519 (000) ldh [6]
3520 (001) jeq #0x800 jt 2 jf 3
3521 (002) ret #262144
3522 (003) ret #0
3523 ',
3524 }, # link_proto_ip_ATM_CLIP
3525 {
3526 name => 'link_proto_ip_IP_OVER_FC',
3527 DLT => 'IP_OVER_FC',
3528 aliases => ['link proto \ip'],
3529 unopt => '
3530 (000) ldh [22]
3531 (001) jeq #0x800 jt 2 jf 3
3532 (002) ret #262144
3533 (003) ret #0
3534 ',
3535 }, # link_proto_ip_IP_OVER_FC
3536 {
3537 name => 'link_proto_ip_SUNATM',
3538 DLT => 'SUNATM',
3539 aliases => ['link proto \ip'],
3540 unopt => '
3541 (000) ldb [0]
3542 (001) and #0xf
3543 (002) jeq #0x2 jt 3 jf 6
3544 (003) ldh [10]
3545 (004) jeq #0x800 jt 5 jf 6
3546 (005) ret #262144
3547 (006) ret #0
3548 ',
3549 }, # link_proto_ip_SUNATM
3550 {
3551 name => 'lane_and_link_proto_ip_SUNATM',
3552 DLT => 'SUNATM',
3553 aliases => ['lane and link proto \ip'],
3554 unopt => '
3555 (000) ldb [0]
3556 (001) and #0xf
3557 (002) jeq #0x1 jt 3 jf 8
3558 (003) ldh [4]
3559 (004) jeq #0xff00 jt 8 jf 5
3560 (005) ldh [18]
3561 (006) jeq #0x800 jt 7 jf 8
3562 (007) ret #262144
3563 (008) ret #0
3564 ',
3565 }, # lane_and_link_proto_ip_SUNATM
3566 {
3567 name => 'link_proto_ip_LINUX_SLL',
3568 DLT => 'LINUX_SLL',
3569 aliases => ['link proto \ip'], # gen_linux_sll_linktype() default case
3570 unopt => '
3571 (000) ldh [14]
3572 (001) jeq #0x800 jt 2 jf 3
3573 (002) ret #262144
3574 (003) ret #0
3575 ',
3576 }, # link_proto_ip_LINUX_SLL
3577 {
3578 name => 'link_proto_ip_LINUX_SLL2',
3579 DLT => 'LINUX_SLL2', # gen_linktype() default case
3580 aliases => ['link proto \ip'],
3581 unopt => '
3582 (000) ldh [0]
3583 (001) jeq #0x800 jt 2 jf 3
3584 (002) ret #262144
3585 (003) ret #0
3586 ',
3587 }, # link_proto_ip_LINUX_SLL
3588 {
3589 name => 'link_proto_ip6_LINUX_SLL',
3590 skip => skip_config_undef ('INET6'),
3591 DLT => 'LINUX_SLL',
3592 aliases => ['link proto \ip6'], # gen_linux_sll_linktype() default case
3593 unopt => '
3594 (000) ldh [14]
3595 (001) jeq #0x86dd jt 2 jf 3
3596 (002) ret #262144
3597 (003) ret #0
3598 ',
3599 }, # link_proto_ip6_LINUX_SLL
3600 {
3601 name => 'link_proto_6_LINUX_SLL',
3602 DLT => 'LINUX_SLL',
3603 aliases => ['link proto 6'], # gen_linux_sll_linktype() LLCSAP_IP
3604 unopt => '
3605 (000) ldh [14]
3606 (001) jeq #0x4 jt 2 jf 5
3607 (002) ldh [16]
3608 (003) jeq #0x606 jt 4 jf 5
3609 (004) ret #262144
3610 (005) ret #0
3611 ',
3612 }, # link_proto_6_LINUX_SLL
3613 {
3614 name => 'link_proto_iso_LINUX_SLL',
3615 DLT => 'LINUX_SLL',
3616 aliases => ['link proto \iso'],
3617 unopt => '
3618 (000) ldh [14]
3619 (001) jeq #0x4 jt 2 jf 5
3620 (002) ldh [16]
3621 (003) jeq #0xfefe jt 4 jf 5
3622 (004) ret #262144
3623 (005) ret #0
3624 ',
3625 }, # link_proto_iso_LINUX_SLL
3626 {
3627 name => 'link_proto_netbeui_LINUX_SLL',
3628 DLT => 'LINUX_SLL',
3629 aliases => ['link proto \netbeui'],
3630 unopt => '
3631 (000) ldh [14]
3632 (001) jeq #0x4 jt 2 jf 5
3633 (002) ldh [16]
3634 (003) jeq #0xf0f0 jt 4 jf 5
3635 (004) ret #262144
3636 (005) ret #0
3637 ',
3638 }, # link_proto_netbeui_LINUX_SLL
3639 {
3640 name => 'link_proto_ipx_LINUX_SLL',
3641 DLT => 'LINUX_SLL',
3642 aliases => ['link proto \ipx'],
3643 opt => '
3644 (000) ldh [14]
3645 (001) jeq #0x8137 jt 10 jf 2
3646 (002) jeq #0x1 jt 10 jf 3
3647 (003) jeq #0x4 jt 4 jf 11
3648 (004) ldb [16]
3649 (005) jeq #0xe0 jt 10 jf 6
3650 (006) ld [20]
3651 (007) jeq #0x8137 jt 8 jf 11
3652 (008) ld [16]
3653 (009) jeq #0xaaaa0300 jt 10 jf 11
3654 (010) ret #262144
3655 (011) ret #0
3656 ',
3657 }, # link_proto_ipx_LINUX_SLL
3658 {
3659 name => 'link_proto_atalk_LINUX_SLL',
3660 DLT => 'LINUX_SLL',
3661 aliases => ['link proto \atalk'],
3662 opt => '
3663 (000) ldh [14]
3664 (001) jeq #0x809b jt 7 jf 2
3665 (002) jeq #0x4 jt 3 jf 8
3666 (003) ld [20]
3667 (004) jeq #0x7809b jt 5 jf 8
3668 (005) ld [16]
3669 (006) jeq #0xaaaa0308 jt 7 jf 8
3670 (007) ret #262144
3671 (008) ret #0
3672 ',
3673 }, # link_proto_atalk_LINUX_SLL
3674 {
3675 name => 'link_proto_aarp_LINUX_SLL',
3676 DLT => 'LINUX_SLL',
3677 aliases => ['link proto \aarp'],
3678 opt => '
3679 (000) ldh [14]
3680 (001) jeq #0x80f3 jt 7 jf 2
3681 (002) jeq #0x4 jt 3 jf 8
3682 (003) ld [20]
3683 (004) jeq #0x80f3 jt 5 jf 8
3684 (005) ld [16]
3685 (006) jeq #0xaaaa0300 jt 7 jf 8
3686 (007) ret #262144
3687 (008) ret #0
3688 ',
3689 }, # link_proto_aarp_LINUX_SLL
3690 {
3691 name => 'link_proto_ip_SLIP',
3692 DLT => 'SLIP',
3693 aliases => ['link proto \ip'],
3694 unopt => '
3695 (000) ldb [0]
3696 (001) and #0xf0
3697 (002) jeq #0x40 jt 3 jf 4
3698 (003) ret #262144
3699 (004) ret #0
3700 ',
3701 }, # link_proto_ip_SLIP
3702 {
3703 name => 'link_proto_ip_SLIP_BSDOS',
3704 DLT => 'SLIP_BSDOS',
3705 aliases => ['link proto \ip'],
3706 unopt => '
3707 (000) ldb [0]
3708 (001) and #0xf0
3709 (002) jeq #0x40 jt 3 jf 4
3710 (003) ret #262144
3711 (004) ret #0
3712 ',
3713 }, # link_proto_ip_SLIP_BSDOS
3714 {
3715 name => 'link_proto_ip_RAW',
3716 DLT => 'RAW',
3717 aliases => ['link proto \ip'],
3718 unopt => '
3719 (000) ldb [0]
3720 (001) and #0xf0
3721 (002) jeq #0x40 jt 3 jf 4
3722 (003) ret #262144
3723 (004) ret #0
3724 ',
3725 }, # link_proto_ip_RAW
3726 {
3727 name => 'link_proto_ip6_RAW',
3728 skip => skip_config_undef ('INET6'),
3729 DLT => 'RAW',
3730 aliases => ['link proto \ip6'],
3731 unopt => '
3732 (000) ldb [0]
3733 (001) and #0xf0
3734 (002) jeq #0x60 jt 3 jf 4
3735 (003) ret #262144
3736 (004) ret #0
3737 ',
3738 }, # link_proto_ip6_RAW
3739 {
3740 name => 'link_proto_stp_RAW',
3741 DLT => 'RAW',
3742 aliases => ['link proto \stp'],
3743 unopt => '
3744 (000) ld #0x1
3745 (001) jeq #0x0 jt 2 jf 3
3746 (002) ret #262144
3747 (003) ret #0
3748 ',
3749 }, # link_proto_stp_RAW
3750 {
3751 name => 'link_proto_ip_IPV4',
3752 DLT => 'IPV4',
3753 aliases => ['link proto \ip'],
3754 opt => '
3755 (000) ret #262144
3756 ',
3757 }, # link_proto_ip_IPV4
3758 {
3759 name => 'link_proto_ip6_IPV4',
3760 skip => skip_config_undef ('INET6'),
3761 DLT => 'IPV4',
3762 aliases => ['link proto \ip6'],
3763 unopt => '
3764 (000) ld #0x1
3765 (001) jeq #0x0 jt 2 jf 3
3766 (002) ret #262144
3767 (003) ret #0
3768 ',
3769 }, # link_proto_ip6_IPV4
3770 {
3771 name => 'link_proto_ip6_IPV6',
3772 skip => skip_config_undef ('INET6'),
3773 DLT => 'IPV6',
3774 aliases => ['link proto \ip6'],
3775 opt => '
3776 (000) ret #262144
3777 ',
3778 }, # link_proto_ip6_IPV6
3779 {
3780 name => 'link_proto_ip_IPV6',
3781 DLT => 'IPV6',
3782 aliases => ['link proto \ip'],
3783 unopt => '
3784 (000) ld #0x1
3785 (001) jeq #0x0 jt 2 jf 3
3786 (002) ret #262144
3787 (003) ret #0
3788 ',
3789 }, # link_proto_ip_IPV6
3790 # 4 DLTs lead to ethertype_to_ppptype(), which implements 9 code paths,
3791 # let's test these for DLT_PPP only.
3792 {
3793 name => 'link_proto_ip_PPP',
3794 DLT => 'PPP',
3795 aliases => ['link proto \ip'],
3796 unopt => '
3797 (000) ldh [2]
3798 (001) jeq #0x21 jt 2 jf 3
3799 (002) ret #262144
3800 (003) ret #0
3801 ',
3802 }, # link_proto_ip_PPP
3803 {
3804 name => 'link_proto_ip6_PPP',
3805 skip => skip_config_undef ('INET6'),
3806 DLT => 'PPP',
3807 aliases => ['link proto \ip6'],
3808 unopt => '
3809 (000) ldh [2]
3810 (001) jeq #0x57 jt 2 jf 3
3811 (002) ret #262144
3812 (003) ret #0
3813 ',
3814 }, # link_proto_ip6_PPP
3815 {
3816 name => 'link_proto_decnet_PPP',
3817 DLT => 'PPP',
3818 aliases => ['link proto \decnet'],
3819 unopt => '
3820 (000) ldh [2]
3821 (001) jeq #0x27 jt 2 jf 3
3822 (002) ret #262144
3823 (003) ret #0
3824 ',
3825 }, # link_proto_decnet_PPP
3826 {
3827 name => 'link_proto_atalk_PPP',
3828 DLT => 'PPP',
3829 aliases => ['link proto \atalk'],
3830 unopt => '
3831 (000) ldh [2]
3832 (001) jeq #0x29 jt 2 jf 3
3833 (002) ret #262144
3834 (003) ret #0
3835 ',
3836 }, # link_proto_atalk_PPP
3837 {
3838 name => 'link_proto_xnsidp_PPP',
3839 DLT => 'PPP',
3840 aliases => ['link proto 0x0600'], # ethertype_to_ppptype() ETHERTYPE_NS
3841 unopt => '
3842 (000) ldh [2]
3843 (001) jeq #0x25 jt 2 jf 3
3844 (002) ret #262144
3845 (003) ret #0
3846 ',
3847 }, # link_proto_xnsidp_PPP
3848 {
3849 name => 'link_proto_iso_PPP',
3850 DLT => 'PPP',
3851 aliases => ['link proto \iso'],
3852 unopt => '
3853 (000) ldh [2]
3854 (001) jeq #0x23 jt 2 jf 3
3855 (002) ret #262144
3856 (003) ret #0
3857 ',
3858 }, # link_proto_iso_PPP
3859 {
3860 name => 'link_proto_stp_PPP',
3861 DLT => 'PPP',
3862 aliases => ['link proto \stp'],
3863 unopt => '
3864 (000) ldh [2]
3865 (001) jeq #0x31 jt 2 jf 3
3866 (002) ret #262144
3867 (003) ret #0
3868 ',
3869 }, # link_proto_stp_PPP
3870 {
3871 name => 'link_proto_lat_PPP',
3872 DLT => 'PPP',
3873 aliases => ['link proto \lat'], # ethertype_to_ppptype() default case
3874 unopt => '
3875 (000) ldh [2]
3876 (001) jeq #0x6004 jt 2 jf 3
3877 (002) ret #262144
3878 (003) ret #0
3879 ',
3880 }, # link_proto_lat_PPP
3881 {
3882 name => 'link_proto_ipx_PPP',
3883 DLT => 'PPP',
3884 aliases => ['link proto \ipx'],
3885 unopt => '
3886 (000) ldh [2]
3887 (001) jeq #0x2b jt 2 jf 3
3888 (002) ret #262144
3889 (003) ret #0
3890 ',
3891 }, # link_proto_ipx_PPP
3892 {
3893 name => 'link_proto_ip_PPP_PPPD',
3894 DLT => 'PPP_PPPD',
3895 aliases => ['link proto \ip'],
3896 unopt => '
3897 (000) ldh [2]
3898 (001) jeq #0x21 jt 2 jf 3
3899 (002) ret #262144
3900 (003) ret #0
3901 ',
3902 }, # link_proto_ip_PPP_PPPD
3903 {
3904 name => 'link_proto_ip_PPP_SERIAL',
3905 DLT => 'PPP_SERIAL',
3906 aliases => ['link proto \ip'],
3907 unopt => '
3908 (000) ldh [2]
3909 (001) jeq #0x21 jt 2 jf 3
3910 (002) ret #262144
3911 (003) ret #0
3912 ',
3913 }, # link_proto_ip_PPP_SERIAL
3914 {
3915 name => 'link_proto_ip_PPP_ETHER',
3916 DLT => 'PPP_ETHER',
3917 aliases => ['link proto \ip'],
3918 unopt => '
3919 (000) ldh [6]
3920 (001) jeq #0x21 jt 2 jf 3
3921 (002) ret #262144
3922 (003) ret #0
3923 ',
3924 }, # link_proto_ip_PPP_ETHER
3925 {
3926 name => 'link_proto_ip_PPP_BSDOS',
3927 DLT => 'PPP_BSDOS',
3928 aliases => ['link proto \ip'],
3929 opt => '
3930 (000) ldh [5]
3931 (001) jeq #0x21 jt 4 jf 2
3932 (002) jeq #0x2d jt 4 jf 3
3933 (003) jeq #0x2f jt 4 jf 5
3934 (004) ret #262144
3935 (005) ret #0
3936 ',
3937 }, # link_proto_ip_PPP_BSDOS
3938 {
3939 name => 'link_proto_ip6_PPP_BSDOS',
3940 skip => skip_config_undef ('INET6'),
3941 DLT => 'PPP_BSDOS',
3942 aliases => ['link proto \ip6'],
3943 unopt => '
3944 (000) ldh [5]
3945 (001) jeq #0x57 jt 2 jf 3
3946 (002) ret #262144
3947 (003) ret #0
3948 ',
3949 }, # link_proto_ip6_PPP_BSDOS
3950
3951 # DLT_NULL and DLT_ENC depend on the values of AF_INET and AF_INET6,
3952 # which are OS-specific, and on the host byte order. Exercise these
3953 # dimensions completely for DLT_NULL only.
3954 {
3955 name => 'link_proto_ip_1LE_NULL',
3956 skip => skip_big_endian() ||
3957 skip_os_not ('haiku'),
3958 DLT => 'NULL',
3959 aliases => ['link proto \ip'],
3960 unopt => '
3961 (000) ld [0]
3962 (001) jeq #0x1000000 jt 2 jf 3
3963 (002) ret #262144
3964 (003) ret #0
3965 ',
3966 }, # link_proto_ip_1LE_NULL
3967 {
3968 name => 'link_proto_ip_2LE_NULL',
3969 skip => skip_big_endian() ||
3970 skip_os ('haiku'),
3971 DLT => 'NULL',
3972 aliases => ['link proto \ip'],
3973 unopt => '
3974 (000) ld [0]
3975 (001) jeq #0x2000000 jt 2 jf 3
3976 (002) ret #262144
3977 (003) ret #0
3978 ',
3979 }, # link_proto_ip_2LE_NULL
3980 {
3981 name => 'link_proto_ip_2BE_NULL',
3982 skip => skip_little_endian(),
3983 DLT => 'NULL',
3984 aliases => ['link proto \ip'],
3985 unopt => '
3986 (000) ld [0]
3987 (001) jeq #0x2 jt 2 jf 3
3988 (002) ret #262144
3989 (003) ret #0
3990 ',
3991 }, # link_proto_ip_2BE_NULL
3992 {
3993 name => 'link_proto_ip6_5LE_NULL',
3994 skip => skip_big_endian() ||
3995 skip_os_not ('haiku') ||
3996 skip_config_undef ('INET6'),
3997 DLT => 'NULL',
3998 aliases => ['link proto \ip6'],
3999 unopt => '
4000 (000) ld [0]
4001 (001) jeq #0x5000000 jt 2 jf 3
4002 (002) ret #262144
4003 (003) ret #0
4004 ',
4005 }, # link_proto_ip6_5LE_NULL
4006 {
4007 name => 'link_proto_ip6_10LE_NULL',
4008 skip => skip_big_endian() ||
4009 skip_os_not ('linux') ||
4010 skip_config_undef ('INET6'),
4011 DLT => 'NULL',
4012 aliases => ['link proto \ip6'],
4013 unopt => '
4014 (000) ld [0]
4015 (001) jeq #0xa000000 jt 2 jf 3
4016 (002) ret #262144
4017 (003) ret #0
4018 ',
4019 }, # link_proto_ip6_10LE_NULL
4020 {
4021 name => 'link_proto_ip6_10BE_NULL',
4022 skip => skip_little_endian() ||
4023 skip_os_not ('linux') ||
4024 skip_config_undef ('INET6'),
4025 DLT => 'NULL',
4026 aliases => ['link proto \ip6'],
4027 unopt => '
4028 (000) ld [0]
4029 (001) jeq #0xa jt 2 jf 3
4030 (002) ret #262144
4031 (003) ret #0
4032 ',
4033 }, # link_proto_ip6_10BE_NULL
4034 {
4035 name => 'link_proto_ip6_22BE_NULL',
4036 skip => skip_little_endian() ||
4037 skip_os_not ('hpux') ||
4038 skip_config_undef ('INET6'),
4039 DLT => 'NULL',
4040 aliases => ['link proto \ip6'],
4041 unopt => '
4042 (000) ld [0]
4043 (001) jeq #0x16 jt 2 jf 3
4044 (002) ret #262144
4045 (003) ret #0
4046 ',
4047 }, # link_proto_ip6_22BE_NULL
4048 {
4049 name => 'link_proto_ip6_24LE_NULL',
4050 skip => skip_big_endian() ||
4051 (skip_os_not ('aix') && skip_os_not ('netbsd') && skip_os_not ('openbsd')) ||
4052 skip_config_undef ('INET6'),
4053 DLT => 'NULL',
4054 aliases => ['link proto \ip6'],
4055 unopt => '
4056 (000) ld [0]
4057 (001) jeq #0x18000000 jt 2 jf 3
4058 (002) ret #262144
4059 (003) ret #0
4060 ',
4061 }, # link_proto_ip6_24LE_NULL
4062 {
4063 name => 'link_proto_ip6_24BE_NULL',
4064 skip => skip_little_endian() ||
4065 (skip_os_not ('aix') && skip_os_not ('netbsd') && skip_os_not ('openbsd')) ||
4066 skip_config_undef ('INET6'),
4067 DLT => 'NULL',
4068 aliases => ['link proto \ip6'],
4069 unopt => '
4070 (000) ld [0]
4071 (001) jeq #0x18 jt 2 jf 3
4072 (002) ret #262144
4073 (003) ret #0
4074 ',
4075 }, # link_proto_ip6_24BE_NULL
4076 {
4077 name => 'link_proto_ip6_26LE_NULL',
4078 skip => skip_big_endian() ||
4079 skip_os_not ('solaris') ||
4080 skip_config_undef ('INET6'),
4081 DLT => 'NULL',
4082 aliases => ['link proto \ip6'],
4083 unopt => '
4084 (000) ld [0]
4085 (001) jeq #0x1a000000 jt 2 jf 3
4086 (002) ret #262144
4087 (003) ret #0
4088 ',
4089 }, # link_proto_ip6_26LE_NULL
4090 {
4091 name => 'link_proto_ip6_26BE_NULL',
4092 skip => skip_little_endian() ||
4093 skip_os_not ('solaris') ||
4094 skip_config_undef ('INET6'),
4095 DLT => 'NULL',
4096 aliases => ['link proto \ip6'],
4097 unopt => '
4098 (000) ld [0]
4099 (001) jeq #0x1a jt 2 jf 3
4100 (002) ret #262144
4101 (003) ret #0
4102 ',
4103 }, # link_proto_ip6_26BE_NULL
4104 {
4105 name => 'link_proto_ip6_28LE_NULL',
4106 skip => skip_big_endian() ||
4107 (skip_os_not ('dragonfly') && skip_os_not ('freebsd')) ||
4108 skip_config_undef ('INET6'),
4109 DLT => 'NULL',
4110 aliases => ['link proto \ip6'],
4111 unopt => '
4112 (000) ld [0]
4113 (001) jeq #0x1c000000 jt 2 jf 3
4114 (002) ret #262144
4115 (003) ret #0
4116 ',
4117 }, # link_proto_ip6_28LE_NULL
4118 {
4119 name => 'link_proto_ip6_28BE_NULL',
4120 skip => skip_little_endian() ||
4121 (skip_os_not ('dragonfly') && skip_os_not ('freebsd')) ||
4122 skip_config_undef ('INET6'),
4123 DLT => 'NULL',
4124 aliases => ['link proto \ip6'],
4125 unopt => '
4126 (000) ld [0]
4127 (001) jeq #0x1c jt 2 jf 3
4128 (002) ret #262144
4129 (003) ret #0
4130 ',
4131 }, # link_proto_ip6_28BE_NULL
4132 {
4133 name => 'link_proto_ip6_30LE_NULL',
4134 skip => skip_big_endian() ||
4135 skip_os_not ('darwin') ||
4136 skip_config_undef ('INET6'),
4137 DLT => 'NULL',
4138 aliases => ['link proto \ip6'],
4139 unopt => '
4140 (000) ld [0]
4141 (001) jeq #0x1e000000 jt 2 jf 3
4142 (002) ret #262144
4143 (003) ret #0
4144 ',
4145 }, # link_proto_ip6_30LE_NULL
4146 {
4147 name => 'link_proto_ip6_30BE_NULL',
4148 skip => skip_little_endian() ||
4149 skip_os_not ('darwin') ||
4150 skip_config_undef ('INET6'),
4151 DLT => 'NULL',
4152 aliases => ['link proto \ip6'],
4153 unopt => '
4154 (000) ld [0]
4155 (001) jeq #0x1e jt 2 jf 3
4156 (002) ret #262144
4157 (003) ret #0
4158 ',
4159 }, # link_proto_ip6_30BE_NULL
4160 {
4161 name => 'link_proto_stp_NULL',
4162 # The same code path for DLT_ENC and DLT_LOOP.
4163 DLT => 'NULL',
4164 aliases => ['link proto \stp'],
4165 unopt => '
4166 (000) ld #0x1
4167 (001) jeq #0x0 jt 2 jf 3
4168 (002) ret #262144
4169 (003) ret #0
4170 ',
4171 }, # link_proto_stp_NULL
4172 {
4173 name => 'link_proto_ip_2LE_ENC',
4174 skip => skip_big_endian() ||
4175 skip_os_not ('linux'),
4176 DLT => 'ENC',
4177 aliases => ['link proto \ip'],
4178 unopt => '
4179 (000) ld [0]
4180 (001) jeq #0x2000000 jt 2 jf 3
4181 (002) ret #262144
4182 (003) ret #0
4183 ',
4184 }, # link_proto_ip_2LE_ENC
4185 {
4186 name => 'link_proto_ip6_28LE_ENC',
4187 skip => skip_big_endian() ||
4188 (skip_os_not ('dragonfly') && skip_os_not ('freebsd')) ||
4189 skip_config_undef ('INET6'),
4190 DLT => 'ENC',
4191 aliases => ['link proto \ip6'],
4192 unopt => '
4193 (000) ld [0]
4194 (001) jeq #0x1c000000 jt 2 jf 3
4195 (002) ret #262144
4196 (003) ret #0
4197 ',
4198 }, # link_proto_ip6_28LE_ENC
4199 # DLT_LOOP and DLT_PFLOG depend on the values of AF_INET and AF_INET6,
4200 # which are OS-specific. Exercise this dimension completely for
4201 # DLT_LOOP only.
4202 {
4203 name => 'link_proto_ip_1_LOOP',
4204 skip => skip_os_not ('haiku'),
4205 DLT => 'LOOP',
4206 aliases => ['link proto \ip'],
4207 unopt => '
4208 (000) ld [0]
4209 (001) jeq #0x1 jt 2 jf 3
4210 (002) ret #262144
4211 (003) ret #0
4212 ',
4213 }, # link_proto_ip_1_LOOP
4214 {
4215 name => 'link_proto_ip_2_LOOP',
4216 skip => skip_os ('haiku'),
4217 DLT => 'LOOP',
4218 aliases => ['link proto \ip'],
4219 unopt => '
4220 (000) ld [0]
4221 (001) jeq #0x2 jt 2 jf 3
4222 (002) ret #262144
4223 (003) ret #0
4224 ',
4225 }, # link_proto_ip_2_LOOP
4226 {
4227 name => 'link_proto_ip6_5_LOOP',
4228 skip => skip_os_not ('haiku') ||
4229 skip_config_undef ('INET6'),
4230 DLT => 'LOOP',
4231 aliases => ['link proto \ip6'],
4232 unopt => '
4233 (000) ld [0]
4234 (001) jeq #0x5 jt 2 jf 3
4235 (002) ret #262144
4236 (003) ret #0
4237 ',
4238 }, # link_proto_ip6_5_LOOP
4239 {
4240 name => 'link_proto_ip6_10_LOOP',
4241 skip => skip_os_not ('linux') ||
4242 skip_config_undef ('INET6'),
4243 DLT => 'LOOP',
4244 aliases => ['link proto \ip6'],
4245 unopt => '
4246 (000) ld [0]
4247 (001) jeq #0xa jt 2 jf 3
4248 (002) ret #262144
4249 (003) ret #0
4250 ',
4251 }, # link_proto_ip6_10_LOOP
4252 {
4253 name => 'link_proto_ip6_22_LOOP',
4254 skip => skip_os_not ('hpux') ||
4255 skip_config_undef ('INET6'),
4256 DLT => 'LOOP',
4257 aliases => ['link proto \ip6'],
4258 unopt => '
4259 (000) ld [0]
4260 (001) jeq #0x16 jt 2 jf 3
4261 (002) ret #262144
4262 (003) ret #0
4263 ',
4264 }, # link_proto_ip6_22_LOOP
4265 {
4266 name => 'link_proto_ip6_24_LOOP',
4267 skip => (skip_os_not ('aix') && skip_os_not ('netbsd') && skip_os_not ('openbsd')) ||
4268 skip_config_undef ('INET6'),
4269 DLT => 'LOOP',
4270 aliases => ['link proto \ip6'],
4271 unopt => '
4272 (000) ld [0]
4273 (001) jeq #0x18 jt 2 jf 3
4274 (002) ret #262144
4275 (003) ret #0
4276 ',
4277 }, # link_proto_ip6_24_LOOP
4278 {
4279 name => 'link_proto_ip6_26_LOOP',
4280 skip => skip_os_not ('solaris') ||
4281 skip_config_undef ('INET6'),
4282 DLT => 'LOOP',
4283 aliases => ['link proto \ip6'],
4284 unopt => '
4285 (000) ld [0]
4286 (001) jeq #0x1a jt 2 jf 3
4287 (002) ret #262144
4288 (003) ret #0
4289 ',
4290 }, # link_proto_ip6_26_LOOP
4291 {
4292 name => 'link_proto_ip6_28_LOOP',
4293 skip => (skip_os_not ('dragonfly') && skip_os_not ('freebsd')) ||
4294 skip_config_undef ('INET6'),
4295 DLT => 'LOOP',
4296 aliases => ['link proto \ip6'],
4297 unopt => '
4298 (000) ld [0]
4299 (001) jeq #0x1c jt 2 jf 3
4300 (002) ret #262144
4301 (003) ret #0
4302 ',
4303 }, # link_proto_ip6_28_LOOP
4304 {
4305 name => 'link_proto_ip6_30_LOOP',
4306 skip => skip_os_not ('darwin') ||
4307 skip_config_undef ('INET6'),
4308 DLT => 'LOOP',
4309 aliases => ['link proto \ip6'],
4310 unopt => '
4311 (000) ld [0]
4312 (001) jeq #0x1e jt 2 jf 3
4313 (002) ret #262144
4314 (003) ret #0
4315 ',
4316 }, # link_proto_ip6_30_LOOP
4317 {
4318 name => 'link_proto_ip_2_PFLOG',
4319 skip => skip_os ('haiku'),
4320 DLT => 'PFLOG',
4321 aliases => ['link proto \ip'],
4322 unopt => '
4323 (000) ldb [1]
4324 (001) jeq #0x2 jt 2 jf 3
4325 (002) ret #262144
4326 (003) ret #0
4327 ',
4328 }, # link_proto_ip_2_PFLOG
4329 {
4330 name => 'link_proto_ip6_24_PFLOG',
4331 skip => (skip_os_not ('aix') && skip_os_not ('netbsd') && skip_os_not ('openbsd')) ||
4332 skip_config_undef ('INET6'),
4333 DLT => 'PFLOG',
4334 aliases => ['link proto \ip6'],
4335 unopt => '
4336 (000) ldb [1]
4337 (001) jeq #0x18 jt 2 jf 3
4338 (002) ret #262144
4339 (003) ret #0
4340 ',
4341 }, # link_proto_ip6_PFLOG
4342 {
4343 name => 'link_proto_stp_PFLOG',
4344 DLT => 'PFLOG',
4345 aliases => ['link proto \stp'],
4346 unopt => '
4347 (000) ld #0x1
4348 (001) jeq #0x0 jt 2 jf 3
4349 (002) ret #262144
4350 (003) ret #0
4351 ',
4352 }, # link_proto_stp_PFLOG
4353 {
4354 name => 'link_proto_stp_ARCNET',
4355 DLT => 'ARCNET',
4356 aliases => ['link proto \stp'],
4357 unopt => '
4358 (000) ld #0x1
4359 (001) jeq #0x0 jt 2 jf 3
4360 (002) ret #262144
4361 (003) ret #0
4362 ',
4363 }, # link_proto_stp_ARCNET
4364 {
4365 name => 'link_proto_ip6_ARCNET',
4366 skip => skip_config_undef ('INET6'),
4367 DLT => 'ARCNET',
4368 aliases => ['link proto \ip6'],
4369 unopt => '
4370 (000) ldb [2]
4371 (001) jeq #0xc4 jt 2 jf 3
4372 (002) ret #262144
4373 (003) ret #0
4374 ',
4375 }, # link_proto_ip6_ARCNET
4376 {
4377 name => 'link_proto_ip_ARCNET',
4378 DLT => 'ARCNET',
4379 aliases => ['link proto \ip'],
4380 opt => '
4381 (000) ldb [2]
4382 (001) jeq #0xd4 jt 3 jf 2
4383 (002) jeq #0xf0 jt 3 jf 4
4384 (003) ret #262144
4385 (004) ret #0
4386 ',
4387 }, # link_proto_ip_ARCNET
4388 {
4389 name => 'link_proto_arp_ARCNET',
4390 DLT => 'ARCNET',
4391 aliases => ['link proto \arp'],
4392 opt => '
4393 (000) ldb [2]
4394 (001) jeq #0xd5 jt 3 jf 2
4395 (002) jeq #0xf1 jt 3 jf 4
4396 (003) ret #262144
4397 (004) ret #0
4398 ',
4399 }, # link_proto_arp_ARCNET
4400 {
4401 name => 'link_proto_rarp_ARCNET',
4402 DLT => 'ARCNET',
4403 aliases => ['link proto \rarp'],
4404 unopt => '
4405 (000) ldb [2]
4406 (001) jeq #0xd6 jt 2 jf 3
4407 (002) ret #262144
4408 (003) ret #0
4409 ',
4410 }, # link_proto_rarp_ARCNET
4411 {
4412 name => 'link_proto_atalk_ARCNET',
4413 DLT => 'ARCNET',
4414 aliases => ['link proto \atalk'],
4415 unopt => '
4416 (000) ldb [2]
4417 (001) jeq #0xdd jt 2 jf 3
4418 (002) ret #262144
4419 (003) ret #0
4420 ',
4421 }, # link_proto_atalk_ARCNET
4422 {
4423 name => 'link_proto_ip6_ARCNET_LINUX',
4424 skip => skip_config_undef ('INET6'),
4425 DLT => 'ARCNET_LINUX',
4426 aliases => ['link proto \ip6'],
4427 unopt => '
4428 (000) ldb [4]
4429 (001) jeq #0xc4 jt 2 jf 3
4430 (002) ret #262144
4431 (003) ret #0
4432 ',
4433 }, # link_proto_ip6_ARCNET_LINUX
4434 {
4435 name => 'link_proto_ip_ARCNET_LINUX',
4436 DLT => 'ARCNET_LINUX',
4437 aliases => ['link proto \ip'],
4438 opt => '
4439 (000) ldb [4]
4440 (001) jeq #0xd4 jt 3 jf 2
4441 (002) jeq #0xf0 jt 3 jf 4
4442 (003) ret #262144
4443 (004) ret #0
4444 ',
4445 }, # link_proto_ip_ARCNET_LINUX
4446 {
4447 name => 'link_proto_arp_ARCNET_LINUX',
4448 DLT => 'ARCNET_LINUX',
4449 aliases => ['link proto \arp'],
4450 opt => '
4451 (000) ldb [4]
4452 (001) jeq #0xd5 jt 3 jf 2
4453 (002) jeq #0xf1 jt 3 jf 4
4454 (003) ret #262144
4455 (004) ret #0
4456 ',
4457 }, # link_proto_arp_ARCNET_LINUX
4458 {
4459 name => 'link_proto_rarp_ARCNET_LINUX',
4460 DLT => 'ARCNET_LINUX',
4461 aliases => ['link proto \rarp'],
4462 unopt => '
4463 (000) ldb [4]
4464 (001) jeq #0xd6 jt 2 jf 3
4465 (002) ret #262144
4466 (003) ret #0
4467 ',
4468 }, # link_proto_rarp_ARCNET_LINUX
4469 {
4470 name => 'link_proto_atalk_ARCNET_LINUX',
4471 DLT => 'ARCNET_LINUX',
4472 aliases => ['link proto \atalk'],
4473 unopt => '
4474 (000) ldb [4]
4475 (001) jeq #0xdd jt 2 jf 3
4476 (002) ret #262144
4477 (003) ret #0
4478 ',
4479 }, # link_proto_atalk_ARCNET_LINUX
4480 {
4481 name => 'link_proto_atalk_LTALK',
4482 DLT => 'LTALK',
4483 aliases => ['link proto \atalk'],
4484 opt => '
4485 (000) ret #262144
4486 ',
4487 }, # link_proto_atalk_LTALK
4488 {
4489 name => 'link_proto_ip_LTALK',
4490 DLT => 'LTALK',
4491 aliases => ['link proto \ip'],
4492 unopt => '
4493 (000) ld #0x1
4494 (001) jeq #0x0 jt 2 jf 3
4495 (002) ret #262144
4496 (003) ret #0
4497 ',
4498 }, # link_proto_ip_LTALK
4499 {
4500 name => 'link_proto_ip_FRELAY',
4501 DLT => 'FRELAY',
4502 aliases => ['link proto \ip'],
4503 unopt => '
4504 (000) ldh [2]
4505 (001) jeq #0x3cc jt 2 jf 3
4506 (002) ret #262144
4507 (003) ret #0
4508 ',
4509 }, # link_proto_ip_FRELAY
4510 {
4511 name => 'link_proto_ip6_FRELAY',
4512 skip => skip_config_undef ('INET6'),
4513 DLT => 'FRELAY',
4514 aliases => ['link proto \ip6'],
4515 unopt => '
4516 (000) ldh [2]
4517 (001) jeq #0x38e jt 2 jf 3
4518 (002) ret #262144
4519 (003) ret #0
4520 ',
4521 }, # link_proto_ip6_FRELAY
4522 {
4523 name => 'link_proto_iso_FRELAY',
4524 DLT => 'FRELAY',
4525 aliases => ['link proto \iso'],
4526 opt => '
4527 (000) ldh [2]
4528 (001) jeq #0x381 jt 4 jf 2
4529 (002) jeq #0x382 jt 4 jf 3
4530 (003) jeq #0x383 jt 4 jf 5
4531 (004) ret #262144
4532 (005) ret #0
4533 ',
4534 }, # link_proto_iso_FRELAY
4535 {
4536 name => 'link_proto_stp_FRELAY',
4537 DLT => 'FRELAY',
4538 aliases => ['link proto \stp'],
4539 unopt => '
4540 (000) ld #0x1
4541 (001) jeq #0x0 jt 2 jf 3
4542 (002) ret #262144
4543 (003) ret #0
4544 ',
4545 }, # link_proto_arp_FRELAY
4546 {
4547 name => 'link_proto_ip_JUNIPER_MFR',
4548 DLT => 'JUNIPER_MFR',
4549 aliases => ['link proto \ip'],
4550 unopt => '
4551 (000) ld [0]
4552 (001) and #0xffffff00
4553 (002) jeq #0x4d474300 jt 3 jf 4
4554 (003) ret #262144
4555 (004) ret #0
4556 ',
4557 }, # link_proto_ip_JUNIPER_MFR
4558 {
4559 name => 'link_proto_ip_BACNET_MS_TP',
4560 DLT => 'BACNET_MS_TP',
4561 aliases => ['link proto \ip'],
4562 unopt => '
4563 (000) ld [0]
4564 (001) and #0xffff0000
4565 (002) jeq #0x55ff0000 jt 3 jf 4
4566 (003) ret #262144
4567 (004) ret #0
4568 ',
4569 }, # link_proto_ip_BACNET_MS_TP
4570 {
4571 name => 'link_proto_ip_IPNET',
4572 DLT => 'IPNET',
4573 aliases => ['link proto \ip'],
4574 unopt => '
4575 (000) ldb [1]
4576 (001) jeq #0x2 jt 2 jf 3
4577 (002) ret #262144
4578 (003) ret #0
4579 ',
4580 }, # link_proto_ip_IPNET
4581 {
4582 name => 'link_proto_ip6_IPNET',
4583 skip => skip_config_undef ('INET6'),
4584 DLT => 'IPNET',
4585 aliases => ['link proto \ip6'],
4586 unopt => '
4587 (000) ldb [1]
4588 (001) jeq #0x1a jt 2 jf 3
4589 (002) ret #262144
4590 (003) ret #0
4591 ',
4592 }, # link_proto_ip6_IPNET
4593 {
4594 name => 'link_proto_stp_IPNET',
4595 DLT => 'IPNET',
4596 aliases => ['link proto \stp'],
4597 unopt => '
4598 (000) ld #0x1
4599 (001) jeq #0x0 jt 2 jf 3
4600 (002) ret #262144
4601 (003) ret #0
4602 ',
4603 }, # link_proto_stp_IPNET
4604
4605 # Edge cases for LLC/EtherType.
4606 {
4607 name => 'link_proto_0_EN10MB',
4608 DLT => 'EN10MB',
4609 aliases => ['link proto 0'],
4610 unopt => '
4611 (000) ldh [12]
4612 (001) jgt #0x5dc jt 5 jf 2
4613 (002) ldb [14]
4614 (003) jeq #0x0 jt 4 jf 5
4615 (004) ret #262144
4616 (005) ret #0
4617 ',
4618 }, # link_proto_0_EN10MB
4619 {
4620 name => 'link_proto_255_EN10MB',
4621 DLT => 'EN10MB',
4622 aliases => ['link proto 255'],
4623 unopt => '
4624 (000) ldh [12]
4625 (001) jgt #0x5dc jt 5 jf 2
4626 (002) ldb [14]
4627 (003) jeq #0xff jt 4 jf 5
4628 (004) ret #262144
4629 (005) ret #0
4630 ',
4631 }, # link_proto_255_EN10MB
4632 {
4633 name => 'link_proto_1501_EN10MB',
4634 DLT => 'EN10MB',
4635 aliases => ['link proto 1501'],
4636 unopt => '
4637 (000) ldh [12]
4638 (001) jeq #0x5dd jt 2 jf 3
4639 (002) ret #262144
4640 (003) ret #0
4641 ',
4642 }, # link_proto_1501_EN10MB
4643 {
4644 name => 'link_proto_65535_EN10MB',
4645 DLT => 'EN10MB',
4646 aliases => ['link proto 65535'],
4647 unopt => '
4648 (000) ldh [12]
4649 (001) jeq #0xffff jt 2 jf 3
4650 (002) ret #262144
4651 (003) ret #0
4652 ',
4653 }, # link_proto_65535_EN10MB
4654
4655 # ARP and RARP tests are interleaved for ease of cross-reference
4656 # because ARP filter programs and RARP filter programs differ in the
4657 # link-layer protocol code point only (0x8035 instead of 0x0806 for
4658 # most DLTs, 0xD6 instead of {0xD5, 0xF1} for ARCnet).
4659 {
4660 name => 'arp_host_addr_en10mb',
4661 DLT => 'EN10MB',
4662 aliases => [
4663 'arp host 1.2.3.4',
4664 'arp src or dst 1.2.3.4',
4665 'arp src or dst host 1.2.3.4',
4666 ],
4667 unopt => '
4668 (000) ldh [12]
4669 (001) jeq #0x806 jt 2 jf 7
4670 (002) ld [28]
4671 (003) jeq #0x1020304 jt 6 jf 4
4672 (004) ld [38]
4673 (005) jeq #0x1020304 jt 6 jf 7
4674 (006) ret #262144
4675 (007) ret #0
4676 ',
4677 }, # arp_host_addr_en10mb
4678 {
4679 name => 'rarp_host_addr_en10mb',
4680 DLT => 'EN10MB',
4681 aliases => [
4682 'rarp host 1.2.3.4',
4683 'rarp src or dst 1.2.3.4',
4684 'rarp src or dst host 1.2.3.4',
4685 ],
4686 unopt => '
4687 (000) ldh [12]
4688 (001) jeq #0x8035 jt 2 jf 7
4689 (002) ld [28]
4690 (003) jeq #0x1020304 jt 6 jf 4
4691 (004) ld [38]
4692 (005) jeq #0x1020304 jt 6 jf 7
4693 (006) ret #262144
4694 (007) ret #0
4695 ',
4696 }, # rarp_host_addr_en10mb
4697 {
4698 name => 'arp_host_name_en10mb',
4699 skip => skip_no_hosts(),
4700 DLT => 'EN10MB',
4701 aliases => [
4702 'arp host noeth-ipv4-noipv6.host123.libpcap.test',
4703 'arp src or dst noeth-ipv4-noipv6.host123.libpcap.test',
4704 'arp src or dst host noeth-ipv4-noipv6.host123.libpcap.test',
4705 ],
4706 unopt => '
4707 (000) ldh [12]
4708 (001) jeq #0x806 jt 2 jf 7
4709 (002) ld [28]
4710 (003) jeq #0xa141e28 jt 6 jf 4
4711 (004) ld [38]
4712 (005) jeq #0xa141e28 jt 6 jf 7
4713 (006) ret #262144
4714 (007) ret #0
4715 ',
4716 }, # arp_host_name_en10mb
4717 {
4718 name => 'rarp_host_name_en10mb',
4719 skip => skip_no_hosts(),
4720 DLT => 'EN10MB',
4721 aliases => [
4722 'rarp host noeth-ipv4-noipv6.host123.libpcap.test',
4723 'rarp src or dst noeth-ipv4-noipv6.host123.libpcap.test',
4724 'rarp src or dst host noeth-ipv4-noipv6.host123.libpcap.test',
4725 ],
4726 unopt => '
4727 (000) ldh [12]
4728 (001) jeq #0x8035 jt 2 jf 7
4729 (002) ld [28]
4730 (003) jeq #0xa141e28 jt 6 jf 4
4731 (004) ld [38]
4732 (005) jeq #0xa141e28 jt 6 jf 7
4733 (006) ret #262144
4734 (007) ret #0
4735 ',
4736 }, # rarp_host_name_en10mb
4737 {
4738 name => 'arp_host_NAME_en10mb',
4739 skip => skip_no_hosts_casecmp(),
4740 DLT => 'EN10MB',
4741 aliases => [
4742 'arp host NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
4743 'arp src or dst NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
4744 'arp src or dst host NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
4745 ],
4746 unopt => '
4747 (000) ldh [12]
4748 (001) jeq #0x806 jt 2 jf 7
4749 (002) ld [28]
4750 (003) jeq #0xa141e28 jt 6 jf 4
4751 (004) ld [38]
4752 (005) jeq #0xa141e28 jt 6 jf 7
4753 (006) ret #262144
4754 (007) ret #0
4755 ',
4756 }, # arp_host_NAME_en10mb
4757 {
4758 name => 'rarp_host_NAME_en10mb',
4759 skip => skip_no_hosts_casecmp(),
4760 DLT => 'EN10MB',
4761 aliases => [
4762 'rarp host NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
4763 'rarp src or dst NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
4764 'rarp src or dst host NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
4765 ],
4766 unopt => '
4767 (000) ldh [12]
4768 (001) jeq #0x8035 jt 2 jf 7
4769 (002) ld [28]
4770 (003) jeq #0xa141e28 jt 6 jf 4
4771 (004) ld [38]
4772 (005) jeq #0xa141e28 jt 6 jf 7
4773 (006) ret #262144
4774 (007) ret #0
4775 ',
4776 }, # rarp_host_NAME_en10mb
4777 {
4778 name => 'arp_src_addr_en10mb',
4779 DLT => 'EN10MB',
4780 aliases => [
4781 'arp src 1.2.3.4',
4782 'arp src host 1.2.3.4',
4783 ],
4784 unopt => '
4785 (000) ldh [12]
4786 (001) jeq #0x806 jt 2 jf 5
4787 (002) ld [28]
4788 (003) jeq #0x1020304 jt 4 jf 5
4789 (004) ret #262144
4790 (005) ret #0
4791 ',
4792 }, # arp_src_addr_en10mb
4793 {
4794 name => 'rarp_src_addr_en10mb',
4795 DLT => 'EN10MB',
4796 aliases => [
4797 'rarp src 1.2.3.4',
4798 'rarp src host 1.2.3.4',
4799 ],
4800 unopt => '
4801 (000) ldh [12]
4802 (001) jeq #0x8035 jt 2 jf 5
4803 (002) ld [28]
4804 (003) jeq #0x1020304 jt 4 jf 5
4805 (004) ret #262144
4806 (005) ret #0
4807 ',
4808 }, # rarp_src_addr_en10mb
4809 {
4810 name => 'arp_src_name_en10mb',
4811 skip => skip_no_hosts(),
4812 DLT => 'EN10MB',
4813 aliases => [
4814 'arp src noeth-ipv4-noipv6.host123.libpcap.test',
4815 'arp src host noeth-ipv4-noipv6.host123.libpcap.test',
4816 ],
4817 unopt => '
4818 (000) ldh [12]
4819 (001) jeq #0x806 jt 2 jf 5
4820 (002) ld [28]
4821 (003) jeq #0xa141e28 jt 4 jf 5
4822 (004) ret #262144
4823 (005) ret #0
4824 ',
4825 }, # arp_src_name_en10mb
4826 {
4827 name => 'rarp_src_name_en10mb',
4828 skip => skip_no_hosts(),
4829 DLT => 'EN10MB',
4830 aliases => [
4831 'rarp src noeth-ipv4-noipv6.host123.libpcap.test',
4832 'rarp src host noeth-ipv4-noipv6.host123.libpcap.test',
4833 ],
4834 unopt => '
4835 (000) ldh [12]
4836 (001) jeq #0x8035 jt 2 jf 5
4837 (002) ld [28]
4838 (003) jeq #0xa141e28 jt 4 jf 5
4839 (004) ret #262144
4840 (005) ret #0
4841 ',
4842 }, # rarp_src_name_en10mb
4843 {
4844 name => 'arp_src_NAME_en10mb',
4845 skip => skip_no_hosts_casecmp(),
4846 DLT => 'EN10MB',
4847 aliases => [
4848 'arp src NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
4849 'arp src host NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
4850 ],
4851 unopt => '
4852 (000) ldh [12]
4853 (001) jeq #0x806 jt 2 jf 5
4854 (002) ld [28]
4855 (003) jeq #0xa141e28 jt 4 jf 5
4856 (004) ret #262144
4857 (005) ret #0
4858 ',
4859 }, # arp_src_NAME_en10mb
4860 {
4861 name => 'rarp_src_NAME_en10mb',
4862 skip => skip_no_hosts_casecmp(),
4863 DLT => 'EN10MB',
4864 aliases => [
4865 'rarp src NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
4866 'rarp src host NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
4867 ],
4868 unopt => '
4869 (000) ldh [12]
4870 (001) jeq #0x8035 jt 2 jf 5
4871 (002) ld [28]
4872 (003) jeq #0xa141e28 jt 4 jf 5
4873 (004) ret #262144
4874 (005) ret #0
4875 ',
4876 }, # rarp_src_NAME_en10mb
4877 {
4878 name => 'arp_dst_addr_en10mb',
4879 DLT => 'EN10MB',
4880 aliases => [
4881 'arp dst 1.2.3.4',
4882 'arp dst host 1.2.3.4',
4883 ],
4884 unopt => '
4885 (000) ldh [12]
4886 (001) jeq #0x806 jt 2 jf 5
4887 (002) ld [38]
4888 (003) jeq #0x1020304 jt 4 jf 5
4889 (004) ret #262144
4890 (005) ret #0
4891 ',
4892 }, # arp_dst_addr_en10mb
4893 {
4894 name => 'rarp_dst_addr_en10mb',
4895 DLT => 'EN10MB',
4896 aliases => [
4897 'rarp dst 1.2.3.4',
4898 'rarp dst host 1.2.3.4',
4899 ],
4900 unopt => '
4901 (000) ldh [12]
4902 (001) jeq #0x8035 jt 2 jf 5
4903 (002) ld [38]
4904 (003) jeq #0x1020304 jt 4 jf 5
4905 (004) ret #262144
4906 (005) ret #0
4907 ',
4908 }, # rarp_dst_addr_en10mb
4909 {
4910 name => 'arp_dst_name_en10mb',
4911 skip => skip_no_hosts(),
4912 DLT => 'EN10MB',
4913 aliases => [
4914 'arp dst noeth-ipv4-noipv6.host123.libpcap.test',
4915 'arp dst host noeth-ipv4-noipv6.host123.libpcap.test',
4916 ],
4917 unopt => '
4918 (000) ldh [12]
4919 (001) jeq #0x806 jt 2 jf 5
4920 (002) ld [38]
4921 (003) jeq #0xa141e28 jt 4 jf 5
4922 (004) ret #262144
4923 (005) ret #0
4924 ',
4925 }, # arp_dst_name_en10mb
4926 {
4927 name => 'rarp_dst_name_en10mb',
4928 skip => skip_no_hosts(),
4929 DLT => 'EN10MB',
4930 aliases => [
4931 'rarp dst noeth-ipv4-noipv6.host123.libpcap.test',
4932 'rarp dst host noeth-ipv4-noipv6.host123.libpcap.test',
4933 ],
4934 unopt => '
4935 (000) ldh [12]
4936 (001) jeq #0x8035 jt 2 jf 5
4937 (002) ld [38]
4938 (003) jeq #0xa141e28 jt 4 jf 5
4939 (004) ret #262144
4940 (005) ret #0
4941 ',
4942 }, # rarp_dst_name_en10mb
4943 {
4944 name => 'arp_dst_NAME_en10mb',
4945 skip => skip_no_hosts_casecmp(),
4946 DLT => 'EN10MB',
4947 aliases => [
4948 'arp dst NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
4949 'arp dst host NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
4950 ],
4951 unopt => '
4952 (000) ldh [12]
4953 (001) jeq #0x806 jt 2 jf 5
4954 (002) ld [38]
4955 (003) jeq #0xa141e28 jt 4 jf 5
4956 (004) ret #262144
4957 (005) ret #0
4958 ',
4959 }, # arp_dst_NAME_en10mb
4960 {
4961 name => 'rarp_dst_NAME_en10mb',
4962 skip => skip_no_hosts_casecmp(),
4963 DLT => 'EN10MB',
4964 aliases => [
4965 'rarp dst NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
4966 'rarp dst host NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
4967 ],
4968 unopt => '
4969 (000) ldh [12]
4970 (001) jeq #0x8035 jt 2 jf 5
4971 (002) ld [38]
4972 (003) jeq #0xa141e28 jt 4 jf 5
4973 (004) ret #262144
4974 (005) ret #0
4975 ',
4976 }, # rarp_dst_NAME_en10mb
4977 # Exercise other DLTs briefly only to touch some of the various code paths
4978 # in gen_linktype() with different L2 headers and offsets for the SPA
4979 # and TPA fields.
4980 {
4981 name => 'arp_host_addr_c_hdlc',
4982 DLT => 'C_HDLC',
4983 aliases => ['arp host 1.2.3.4'],
4984 opt => '
4985 (000) ldh [2]
4986 (001) jeq #0x806 jt 2 jf 7
4987 (002) ld [18]
4988 (003) jeq #0x1020304 jt 6 jf 4
4989 (004) ld [28]
4990 (005) jeq #0x1020304 jt 6 jf 7
4991 (006) ret #262144
4992 (007) ret #0
4993 ',
4994 }, # arp_host_addr_c_hdlc
4995 {
4996 name => 'arp_host_addr_c_hdlc',
4997 DLT => 'C_HDLC',
4998 aliases => ['rarp host 1.2.3.4'],
4999 unopt => '
5000 (000) ldh [2]
5001 (001) jeq #0x8035 jt 2 jf 7
5002 (002) ld [18]
5003 (003) jeq #0x1020304 jt 6 jf 4
5004 (004) ld [28]
5005 (005) jeq #0x1020304 jt 6 jf 7
5006 (006) ret #262144
5007 (007) ret #0
5008 ',
5009 }, # rarp_host_addr_c_hdlc
5010 {
5011 name => 'arp_host_addr_ieee802_11',
5012 DLT => 'IEEE802_11',
5013 aliases => ['arp host 1.2.3.4'],
5014 opt => '
5015 (000) ldx #0x0
5016 (001) txa
5017 (002) add #24
5018 (003) st M[0]
5019 (004) ldb [x + 0]
5020 (005) jset #0x8 jt 6 jf 11
5021 (006) jset #0x4 jt 11 jf 7
5022 (007) jset #0x80 jt 8 jf 11
5023 (008) ld M[0]
5024 (009) add #2
5025 (010) st M[0]
5026 (011) ldb [0]
5027 (012) and #0xc
5028 (013) jeq #0x8 jt 14 jf 24
5029 (014) ldx M[0]
5030 (015) ldh [x + 6]
5031 (016) jeq #0x806 jt 17 jf 24
5032 (017) ldx M[0]
5033 (018) ld [x + 22]
5034 (019) jeq #0x1020304 jt 23 jf 20
5035 (020) ldx M[0]
5036 (021) ld [x + 32]
5037 (022) jeq #0x1020304 jt 23 jf 24
5038 (023) ret #262144
5039 (024) ret #0
5040 ',
5041 }, # arp_host_addr_ieee802_11
5042 {
5043 name => 'rarp_host_addr_ieee802_11',
5044 DLT => 'IEEE802_11',
5045 aliases => ['rarp host 1.2.3.4'],
5046 opt => '
5047 (000) ldx #0x0
5048 (001) txa
5049 (002) add #24
5050 (003) st M[0]
5051 (004) ldb [x + 0]
5052 (005) jset #0x8 jt 6 jf 11
5053 (006) jset #0x4 jt 11 jf 7
5054 (007) jset #0x80 jt 8 jf 11
5055 (008) ld M[0]
5056 (009) add #2
5057 (010) st M[0]
5058 (011) ldb [0]
5059 (012) and #0xc
5060 (013) jeq #0x8 jt 14 jf 24
5061 (014) ldx M[0]
5062 (015) ldh [x + 6]
5063 (016) jeq #0x8035 jt 17 jf 24
5064 (017) ldx M[0]
5065 (018) ld [x + 22]
5066 (019) jeq #0x1020304 jt 23 jf 20
5067 (020) ldx M[0]
5068 (021) ld [x + 32]
5069 (022) jeq #0x1020304 jt 23 jf 24
5070 (023) ret #262144
5071 (024) ret #0
5072 ',
5073 }, # rarp_host_addr_ieee802_11
5074 {
5075 name => 'arp_host_addr_fddi',
5076 DLT => 'FDDI',
5077 aliases => ['arp host 1.2.3.4'],
5078 unopt => '
5079 (000) ldh [19]
5080 (001) jeq #0x806 jt 2 jf 7
5081 (002) ld [35]
5082 (003) jeq #0x1020304 jt 6 jf 4
5083 (004) ld [45]
5084 (005) jeq #0x1020304 jt 6 jf 7
5085 (006) ret #262144
5086 (007) ret #0
5087 ',
5088 }, # arp_host_addr_fddi
5089 {
5090 name => 'rarp_host_addr_fddi',
5091 DLT => 'FDDI',
5092 aliases => ['rarp host 1.2.3.4'],
5093 unopt => '
5094 (000) ldh [19]
5095 (001) jeq #0x8035 jt 2 jf 7
5096 (002) ld [35]
5097 (003) jeq #0x1020304 jt 6 jf 4
5098 (004) ld [45]
5099 (005) jeq #0x1020304 jt 6 jf 7
5100 (006) ret #262144
5101 (007) ret #0
5102 ',
5103 }, # rarp_host_addr_fddi
5104 {
5105 name => 'arp_host_addr_ieee802',
5106 DLT => 'IEEE802',
5107 aliases => ['arp host 1.2.3.4'],
5108 unopt => '
5109 (000) ldh [20]
5110 (001) jeq #0x806 jt 2 jf 7
5111 (002) ld [36]
5112 (003) jeq #0x1020304 jt 6 jf 4
5113 (004) ld [46]
5114 (005) jeq #0x1020304 jt 6 jf 7
5115 (006) ret #262144
5116 (007) ret #0
5117 ',
5118 }, # arp_host_addr_ieee802
5119 {
5120 name => 'rarp_host_addr_ieee802',
5121 DLT => 'IEEE802',
5122 aliases => ['rarp host 1.2.3.4'],
5123 unopt => '
5124 (000) ldh [20]
5125 (001) jeq #0x8035 jt 2 jf 7
5126 (002) ld [36]
5127 (003) jeq #0x1020304 jt 6 jf 4
5128 (004) ld [46]
5129 (005) jeq #0x1020304 jt 6 jf 7
5130 (006) ret #262144
5131 (007) ret #0
5132 ',
5133 }, # rarp_host_addr_ieee802
5134 {
5135 name => 'arp_host_addr_ip_over_fc',
5136 DLT => 'IP_OVER_FC',
5137 aliases => ['arp host 1.2.3.4'],
5138 unopt => '
5139 (000) ldh [22]
5140 (001) jeq #0x806 jt 2 jf 7
5141 (002) ld [38]
5142 (003) jeq #0x1020304 jt 6 jf 4
5143 (004) ld [48]
5144 (005) jeq #0x1020304 jt 6 jf 7
5145 (006) ret #262144
5146 (007) ret #0
5147 ',
5148 }, # arp_host_addr_ip_over_fc
5149 {
5150 name => 'rarp_host_addr_ip_over_fc',
5151 DLT => 'IP_OVER_FC',
5152 aliases => ['rarp host 1.2.3.4'],
5153 unopt => '
5154 (000) ldh [22]
5155 (001) jeq #0x8035 jt 2 jf 7
5156 (002) ld [38]
5157 (003) jeq #0x1020304 jt 6 jf 4
5158 (004) ld [48]
5159 (005) jeq #0x1020304 jt 6 jf 7
5160 (006) ret #262144
5161 (007) ret #0
5162 ',
5163 }, # rarp_host_addr_ip_over_fc
5164 {
5165 name => 'arp_host_addr_sunatm',
5166 DLT => 'SUNATM',
5167 aliases => ['arp host 1.2.3.4'],
5168 unopt => '
5169 (000) ldb [0]
5170 (001) and #0xf
5171 (002) jeq #0x2 jt 3 jf 10
5172 (003) ldh [10]
5173 (004) jeq #0x806 jt 5 jf 10
5174 (005) ld [26]
5175 (006) jeq #0x1020304 jt 9 jf 7
5176 (007) ld [36]
5177 (008) jeq #0x1020304 jt 9 jf 10
5178 (009) ret #262144
5179 (010) ret #0
5180 ',
5181 }, # arp_host_addr_sunatm
5182 {
5183 name => 'rarp_host_addr_sunatm',
5184 DLT => 'SUNATM',
5185 aliases => ['rarp host 1.2.3.4'],
5186 unopt => '
5187 (000) ldb [0]
5188 (001) and #0xf
5189 (002) jeq #0x2 jt 3 jf 10
5190 (003) ldh [10]
5191 (004) jeq #0x8035 jt 5 jf 10
5192 (005) ld [26]
5193 (006) jeq #0x1020304 jt 9 jf 7
5194 (007) ld [36]
5195 (008) jeq #0x1020304 jt 9 jf 10
5196 (009) ret #262144
5197 (010) ret #0
5198 ',
5199 }, # rarp_host_addr_sunatm
5200 {
5201 name => 'arp_host_addr_linux_sll',
5202 DLT => 'LINUX_SLL',
5203 aliases => ['arp host 1.2.3.4'],
5204 unopt => '
5205 (000) ldh [14]
5206 (001) jeq #0x806 jt 2 jf 7
5207 (002) ld [30]
5208 (003) jeq #0x1020304 jt 6 jf 4
5209 (004) ld [40]
5210 (005) jeq #0x1020304 jt 6 jf 7
5211 (006) ret #262144
5212 (007) ret #0
5213 ',
5214 }, # arp_host_addr_linux_sll
5215 {
5216 name => 'rarp_host_addr_linux_sll',
5217 DLT => 'LINUX_SLL',
5218 aliases => ['rarp host 1.2.3.4'],
5219 unopt => '
5220 (000) ldh [14]
5221 (001) jeq #0x8035 jt 2 jf 7
5222 (002) ld [30]
5223 (003) jeq #0x1020304 jt 6 jf 4
5224 (004) ld [40]
5225 (005) jeq #0x1020304 jt 6 jf 7
5226 (006) ret #262144
5227 (007) ret #0
5228 ',
5229 }, # rarp_host_addr_linux_sll
5230 {
5231 name => 'arp_host_addr_raw',
5232 DLT => 'RAW',
5233 aliases => ['arp host 1.2.3.4'],
5234 # This boils down to "ret #0", which the optimizer expectedly rejects.
5235 unopt => '
5236 (000) ld #0x1
5237 (001) jeq #0x0 jt 2 jf 7
5238 (002) ld [14]
5239 (003) jeq #0x1020304 jt 6 jf 4
5240 (004) ld [24]
5241 (005) jeq #0x1020304 jt 6 jf 7
5242 (006) ret #262144
5243 (007) ret #0
5244 ',
5245 }, # arp_host_addr_raw
5246 {
5247 name => 'rarp_host_addr_raw',
5248 DLT => 'RAW',
5249 aliases => ['rarp host 1.2.3.4'],
5250 unopt => '
5251 (000) ld #0x1
5252 (001) jeq #0x0 jt 2 jf 7
5253 (002) ld [14]
5254 (003) jeq #0x1020304 jt 6 jf 4
5255 (004) ld [24]
5256 (005) jeq #0x1020304 jt 6 jf 7
5257 (006) ret #262144
5258 (007) ret #0
5259 ',
5260 }, # rarp_host_addr_raw
5261 {
5262 name => 'arp_host_addr_ppp',
5263 DLT => 'PPP',
5264 aliases => ['arp host 1.2.3.4'],
5265 unopt => '
5266 (000) ldh [2]
5267 (001) jeq #0x806 jt 2 jf 7
5268 (002) ld [18]
5269 (003) jeq #0x1020304 jt 6 jf 4
5270 (004) ld [28]
5271 (005) jeq #0x1020304 jt 6 jf 7
5272 (006) ret #262144
5273 (007) ret #0
5274 ',
5275 }, # arp_host_addr_ppp
5276 {
5277 name => 'rarp_host_addr_ppp',
5278 DLT => 'PPP',
5279 aliases => ['rarp host 1.2.3.4'],
5280 unopt => '
5281 (000) ldh [2]
5282 (001) jeq #0x8035 jt 2 jf 7
5283 (002) ld [18]
5284 (003) jeq #0x1020304 jt 6 jf 4
5285 (004) ld [28]
5286 (005) jeq #0x1020304 jt 6 jf 7
5287 (006) ret #262144
5288 (007) ret #0
5289 ',
5290 }, # rarp_host_addr_ppp
5291 {
5292 name => 'arp_host_addr_ppp_bsdos',
5293 DLT => 'PPP_BSDOS',
5294 aliases => ['arp host 1.2.3.4'],
5295 unopt => '
5296 (000) ldh [5]
5297 (001) jeq #0x806 jt 2 jf 7
5298 (002) ld [38]
5299 (003) jeq #0x1020304 jt 6 jf 4
5300 (004) ld [48]
5301 (005) jeq #0x1020304 jt 6 jf 7
5302 (006) ret #262144
5303 (007) ret #0
5304 ',
5305 }, # arp_host_addr_ppp_bsdos
5306 {
5307 name => 'rarp_host_addr_ppp_bsdos',
5308 DLT => 'PPP_BSDOS',
5309 aliases => ['rarp host 1.2.3.4'],
5310 unopt => '
5311 (000) ldh [5]
5312 (001) jeq #0x8035 jt 2 jf 7
5313 (002) ld [38]
5314 (003) jeq #0x1020304 jt 6 jf 4
5315 (004) ld [48]
5316 (005) jeq #0x1020304 jt 6 jf 7
5317 (006) ret #262144
5318 (007) ret #0
5319 ',
5320 }, # rarp_host_addr_ppp_bsdos
5321 {
5322 name => 'arp_host_addr_arcnet',
5323 DLT => 'ARCNET',
5324 aliases => ['arp host 1.2.3.4'],
5325 opt => '
5326 (000) ldb [2]
5327 (001) jeq #0xd5 jt 3 jf 2
5328 (002) jeq #0xf1 jt 3 jf 8
5329 (003) ld [20]
5330 (004) jeq #0x1020304 jt 7 jf 5
5331 (005) ld [30]
5332 (006) jeq #0x1020304 jt 7 jf 8
5333 (007) ret #262144
5334 (008) ret #0
5335 ',
5336 }, # arp_host_addr_arcnet
5337 {
5338 name => 'rarp_host_addr_arcnet',
5339 DLT => 'ARCNET',
5340 aliases => ['rarp host 1.2.3.4'],
5341 unopt => '
5342 (000) ldb [2]
5343 (001) jeq #0xd6 jt 2 jf 7
5344 (002) ld [20]
5345 (003) jeq #0x1020304 jt 6 jf 4
5346 (004) ld [30]
5347 (005) jeq #0x1020304 jt 6 jf 7
5348 (006) ret #262144
5349 (007) ret #0
5350 ',
5351 }, # rarp_host_addr_arcnet
5352 # At the time of this writing the DLTs below stand for the default case
5353 # in gen_linktype().
5354 {
5355 name => 'arp_host_addr_linux_sll2',
5356 DLT => 'LINUX_SLL2',
5357 aliases => ['arp host 1.2.3.4'],
5358 unopt => '
5359 (000) ldh [0]
5360 (001) jeq #0x806 jt 2 jf 7
5361 (002) ld [34]
5362 (003) jeq #0x1020304 jt 6 jf 4
5363 (004) ld [44]
5364 (005) jeq #0x1020304 jt 6 jf 7
5365 (006) ret #262144
5366 (007) ret #0
5367 ',
5368 }, # arp_host_addr_linux_sll2
5369 {
5370 name => 'rarp_host_addr_linux_sll2',
5371 DLT => 'LINUX_SLL2',
5372 aliases => ['rarp host 1.2.3.4'],
5373 unopt => '
5374 (000) ldh [0]
5375 (001) jeq #0x8035 jt 2 jf 7
5376 (002) ld [34]
5377 (003) jeq #0x1020304 jt 6 jf 4
5378 (004) ld [44]
5379 (005) jeq #0x1020304 jt 6 jf 7
5380 (006) ret #262144
5381 (007) ret #0
5382 ',
5383 }, # rarp_host_addr_linux_sll2
5384 {
5385 name => 'arp_host_addr_symfw',
5386 DLT => 'SYMANTEC_FIREWALL',
5387 aliases => ['arp host 1.2.3.4'],
5388 unopt => '
5389 (000) ldh [6]
5390 (001) jeq #0x806 jt 2 jf 7
5391 (002) ld [58]
5392 (003) jeq #0x1020304 jt 6 jf 4
5393 (004) ld [68]
5394 (005) jeq #0x1020304 jt 6 jf 7
5395 (006) ret #262144
5396 (007) ret #0
5397 ',
5398 }, # arp_host_addr_symfw
5399 {
5400 name => 'rarp_host_addr_symfw',
5401 DLT => 'SYMANTEC_FIREWALL',
5402 aliases => ['rarp host 1.2.3.4'],
5403 unopt => '
5404 (000) ldh [6]
5405 (001) jeq #0x8035 jt 2 jf 7
5406 (002) ld [58]
5407 (003) jeq #0x1020304 jt 6 jf 4
5408 (004) ld [68]
5409 (005) jeq #0x1020304 jt 6 jf 7
5410 (006) ret #262144
5411 (007) ret #0
5412 ',
5413 }, # rarp_host_addr_symfw
5414 {
5415 name => 'arp_host_addr_ipoieee1394',
5416 DLT => 'APPLE_IP_OVER_IEEE1394',
5417 aliases => ['arp host 1.2.3.4'],
5418 unopt => '
5419 (000) ldh [16]
5420 (001) jeq #0x806 jt 2 jf 7
5421 (002) ld [32]
5422 (003) jeq #0x1020304 jt 6 jf 4
5423 (004) ld [42]
5424 (005) jeq #0x1020304 jt 6 jf 7
5425 (006) ret #262144
5426 (007) ret #0
5427 ',
5428 }, # arp_host_addr_ipoieee1394
5429 {
5430 name => 'rarp_host_addr_ipoieee1394',
5431 DLT => 'APPLE_IP_OVER_IEEE1394',
5432 aliases => ['rarp host 1.2.3.4'],
5433 unopt => '
5434 (000) ldh [16]
5435 (001) jeq #0x8035 jt 2 jf 7
5436 (002) ld [32]
5437 (003) jeq #0x1020304 jt 6 jf 4
5438 (004) ld [42]
5439 (005) jeq #0x1020304 jt 6 jf 7
5440 (006) ret #262144
5441 (007) ret #0
5442 ',
5443 }, # rarp_host_addr_ipoieee1394
5444
5445 {
5446 name => 'arp_net_addr',
5447 DLT => 'EN10MB',
5448 snaplen => 2000,
5449 aliases => [
5450 'arp net 192.168.0.0/16',
5451 'arp src or dst net 192.168.0.0/16',
5452 'arp net 192.168/16',
5453 'arp src or dst net 192.168/16',
5454 'arp net 192.168.0.0 mask 255.255.0.0',
5455 'arp src or dst net 192.168.0.0 mask 255.255.0.0',
5456 'arp net 192.168.0.0 mask 255.255',
5457 'arp src or dst net 192.168.0.0 mask 255.255',
5458 'arp net 192.168 mask 255.255.0.0',
5459 'arp src or dst net 192.168 mask 255.255.0.0',
5460 'arp net 192.168 mask 255.255',
5461 'arp src or dst net 192.168 mask 255.255',
5462 'arp net 192.168',
5463 'arp src or dst net 192.168',
5464 ],
5465 unopt => '
5466 (000) ldh [12]
5467 (001) jeq #0x806 jt 2 jf 9
5468 (002) ld [28]
5469 (003) and #0xffff0000
5470 (004) jeq #0xc0a80000 jt 8 jf 5
5471 (005) ld [38]
5472 (006) and #0xffff0000
5473 (007) jeq #0xc0a80000 jt 8 jf 9
5474 (008) ret #2000
5475 (009) ret #0
5476 ',
5477 }, # arp_net_addr
5478 {
5479 name => 'rarp_net_addr',
5480 DLT => 'LINUX_SLL2',
5481 snaplen => 2000,
5482 aliases => [
5483 'rarp net 192.168.0.0/16',
5484 'rarp src or dst net 192.168.0.0/16',
5485 'rarp net 192.168/16',
5486 'rarp src or dst net 192.168/16',
5487 'rarp net 192.168.0.0 mask 255.255.0.0',
5488 'rarp src or dst net 192.168.0.0 mask 255.255.0.0',
5489 'rarp net 192.168.0.0 mask 255.255',
5490 'rarp src or dst net 192.168.0.0 mask 255.255',
5491 'rarp net 192.168 mask 255.255.0.0',
5492 'rarp src or dst net 192.168 mask 255.255.0.0',
5493 'rarp net 192.168 mask 255.255',
5494 'rarp src or dst net 192.168 mask 255.255',
5495 'rarp net 192.168',
5496 'rarp src or dst net 192.168',
5497 ],
5498 unopt => '
5499 (000) ldh [0]
5500 (001) jeq #0x8035 jt 2 jf 9
5501 (002) ld [34]
5502 (003) and #0xffff0000
5503 (004) jeq #0xc0a80000 jt 8 jf 5
5504 (005) ld [44]
5505 (006) and #0xffff0000
5506 (007) jeq #0xc0a80000 jt 8 jf 9
5507 (008) ret #2000
5508 (009) ret #0
5509 ',
5510 }, # rarp_net_addr
5511 {
5512 name => 'arp_net_name',
5513 skip => skip_no_networks(),
5514 DLT => 'LINUX_SLL',
5515 aliases => [
5516 'arp net net-10-0-0-0.libpcap.test',
5517 'arp src or dst net net-10-0-0-0.libpcap.test',
5518 ],
5519 unopt => '
5520 (000) ldh [14]
5521 (001) jeq #0x806 jt 2 jf 7
5522 (002) ld [30]
5523 (003) jeq #0xa000000 jt 6 jf 4
5524 (004) ld [40]
5525 (005) jeq #0xa000000 jt 6 jf 7
5526 (006) ret #262144
5527 (007) ret #0
5528 ',
5529 }, # arp_net_name
5530 {
5531 name => 'rarp_net_name',
5532 skip => skip_no_networks(),
5533 DLT => 'IP_OVER_FC',
5534 aliases => [
5535 'rarp net net-10-0-0-0.libpcap.test',
5536 'rarp src or dst net net-10-0-0-0.libpcap.test',
5537 ],
5538 unopt => '
5539 (000) ldh [22]
5540 (001) jeq #0x8035 jt 2 jf 7
5541 (002) ld [38]
5542 (003) jeq #0xa000000 jt 6 jf 4
5543 (004) ld [48]
5544 (005) jeq #0xa000000 jt 6 jf 7
5545 (006) ret #262144
5546 (007) ret #0
5547 ',
5548 }, # rarp_net_name
5549 {
5550 name => 'arp_net_NAME',
5551 skip => skip_no_networks_casecmp(),
5552 DLT => 'SUNATM',
5553 aliases => [
5554 'arp net NET-10-0-0-0.LIBPCAP.TEST',
5555 'arp src or dst net NET-10-0-0-0.LIBPCAP.TEST',
5556 ],
5557 unopt => '
5558 (000) ldb [0]
5559 (001) and #0xf
5560 (002) jeq #0x2 jt 3 jf 10
5561 (003) ldh [10]
5562 (004) jeq #0x806 jt 5 jf 10
5563 (005) ld [26]
5564 (006) jeq #0xa000000 jt 9 jf 7
5565 (007) ld [36]
5566 (008) jeq #0xa000000 jt 9 jf 10
5567 (009) ret #262144
5568 (010) ret #0
5569 ',
5570 }, # arp_net_NAME
5571 {
5572 name => 'rarp_net_NAME',
5573 skip => skip_no_networks_casecmp(),
5574 DLT => 'ARCNET',
5575 aliases => [
5576 'rarp net NET-10-0-0-0.LIBPCAP.TEST',
5577 'rarp src or dst net NET-10-0-0-0.LIBPCAP.TEST',
5578 ],
5579 unopt => '
5580 (000) ldb [2]
5581 (001) jeq #0xd6 jt 2 jf 7
5582 (002) ld [20]
5583 (003) jeq #0xa000000 jt 6 jf 4
5584 (004) ld [30]
5585 (005) jeq #0xa000000 jt 6 jf 7
5586 (006) ret #262144
5587 (007) ret #0
5588 ',
5589 }, # rarp_net_NAME
5590
5591 {
5592 name => 'vlan_eth_nullary',
5593 DLT => 'EN10MB',
5594 aliases => ['vlan'],
5595 opt => '
5596 (000) ldh [12]
5597 (001) jeq #0x8100 jt 4 jf 2
5598 (002) jeq #0x88a8 jt 4 jf 3
5599 (003) jeq #0x9100 jt 4 jf 5
5600 (004) ret #262144
5601 (005) ret #0
5602 ',
5603 }, # vlan_eth_nullary
5604 {
5605 name => 'vlan_eth_unary',
5606 DLT => 'EN10MB',
5607 aliases => ['vlan 4095'],
5608 opt => '
5609 (000) ldh [12]
5610 (001) jeq #0x8100 jt 4 jf 2
5611 (002) jeq #0x88a8 jt 4 jf 3
5612 (003) jeq #0x9100 jt 4 jf 8
5613 (004) ldh [14]
5614 (005) and #0xfff
5615 (006) jeq #0xfff jt 7 jf 8
5616 (007) ret #262144
5617 (008) ret #0
5618 ',
5619 }, # vlan_eth_unary
5620 {
5621 name => 'vlan_and_vlan_eth',
5622 DLT => 'EN10MB',
5623 aliases => ['vlan and vlan'],
5624 opt => '
5625 (000) ldh [12]
5626 (001) jeq #0x8100 jt 4 jf 2
5627 (002) jeq #0x88a8 jt 4 jf 3
5628 (003) jeq #0x9100 jt 4 jf 9
5629 (004) ldh [16]
5630 (005) jeq #0x8100 jt 8 jf 6
5631 (006) jeq #0x88a8 jt 8 jf 7
5632 (007) jeq #0x9100 jt 8 jf 9
5633 (008) ret #262144
5634 (009) ret #0
5635 ',
5636 }, # vlan_and_vlan_eth
5637 {
5638 name => 'vlan_netanalyzer_nullary',
5639 DLT => 'NETANALYZER',
5640 aliases => ['vlan'],
5641 opt => '
5642 (000) ldh [16]
5643 (001) jeq #0x8100 jt 4 jf 2
5644 (002) jeq #0x88a8 jt 4 jf 3
5645 (003) jeq #0x9100 jt 4 jf 5
5646 (004) ret #262144
5647 (005) ret #0
5648 ',
5649 }, # vlan_netanalyzer_nullary
5650 {
5651 name => 'vlan_netanalyzer_unary',
5652 DLT => 'NETANALYZER',
5653 aliases => ['vlan 10'],
5654 opt => '
5655 (000) ldh [16]
5656 (001) jeq #0x8100 jt 4 jf 2
5657 (002) jeq #0x88a8 jt 4 jf 3
5658 (003) jeq #0x9100 jt 4 jf 8
5659 (004) ldh [18]
5660 (005) and #0xfff
5661 (006) jeq #0xa jt 7 jf 8
5662 (007) ret #262144
5663 (008) ret #0
5664 ',
5665 }, # vlan_netanalyzer_unary
5666 {
5667 name => 'vlan_eth_linuxext_nullary',
5668 skip => skip_os_not ('linux') || skip_config_have_decl ('SKF_AD_VLAN_TAG_PRESENT', 0),
5669 DLT => 'EN10MB',
5670 linuxext => 1,
5671 aliases => ['vlan'],
5672 opt => '
5673 (000) ldb [vlanp]
5674 (001) jeq #0x1 jt 6 jf 2
5675 (002) ldh [12]
5676 (003) jeq #0x8100 jt 6 jf 4
5677 (004) jeq #0x88a8 jt 6 jf 5
5678 (005) jeq #0x9100 jt 6 jf 7
5679 (006) ret #262144
5680 (007) ret #0
5681 ',
5682 }, # vlan_eth_linuxext_nullary
5683 {
5684 name => 'vlan_eth_linuxext_unary',
5685 skip => skip_os_not ('linux') || skip_config_have_decl ('SKF_AD_VLAN_TAG_PRESENT', 0),
5686 DLT => 'EN10MB',
5687 linuxext => 1,
5688 aliases => ['vlan 10'],
5689 opt => '
5690 (000) ldb [vlanp]
5691 (001) jeq #0x1 jt 6 jf 2
5692 (002) ldh [12]
5693 (003) jeq #0x8100 jt 6 jf 4
5694 (004) jeq #0x88a8 jt 6 jf 5
5695 (005) jeq #0x9100 jt 6 jf 14
5696 (006) ldb [vlanp]
5697 (007) jeq #0x1 jt 8 jf 10
5698 (008) ldh [vlan_tci]
5699 (009) ja 11
5700 (010) ldh [14]
5701 (011) and #0xfff
5702 (012) jeq #0xa jt 13 jf 14
5703 (013) ret #262144
5704 (014) ret #0
5705 ',
5706 }, # vlan_eth_linuxext_unary
5707 {
5708 name => 'vlan_and_vlan_eth_linuxext',
5709 skip => skip_os_not ('linux') || skip_config_have_decl ('SKF_AD_VLAN_TAG_PRESENT', 0),
5710 DLT => 'EN10MB',
5711 linuxext => 1,
5712 aliases => ['vlan and vlan'],
5713 opt => '
5714 (000) ld #0x0
5715 (001) st M[1]
5716 (002) ldb [vlanp]
5717 (003) jeq #0x1 jt 10 jf 4
5718 (004) ld #0x4
5719 (005) st M[1]
5720 (006) ldh [12]
5721 (007) jeq #0x8100 jt 10 jf 8
5722 (008) jeq #0x88a8 jt 10 jf 9
5723 (009) jeq #0x9100 jt 10 jf 16
5724 (010) ldx M[1]
5725 (011) ldh [x + 12]
5726 (012) jeq #0x8100 jt 15 jf 13
5727 (013) jeq #0x88a8 jt 15 jf 14
5728 (014) jeq #0x9100 jt 15 jf 16
5729 (015) ret #262144
5730 (016) ret #0
5731 ',
5732 }, # vlan_and_vlan_eth_linuxext
5733
5734 {
5735 name => 'mpls_eth_nullary',
5736 DLT => 'EN10MB',
5737 aliases => ['mpls'],
5738 opt => '
5739 (000) ldh [12]
5740 (001) jeq #0x8847 jt 2 jf 3
5741 (002) ret #262144
5742 (003) ret #0
5743 ',
5744 }, # mpls_eth_nullary
5745 {
5746 name => 'mpls_eth_unary',
5747 DLT => 'EN10MB',
5748 aliases => ['mpls 100'],
5749 opt => '
5750 (000) ldh [12]
5751 (001) jeq #0x8847 jt 2 jf 6
5752 (002) ld [14]
5753 (003) and #0xfffff000
5754 (004) jeq #0x64000 jt 5 jf 6
5755 (005) ret #262144
5756 (006) ret #0
5757 ',
5758 }, # mpls_eth_unary
5759 {
5760 name => 'mpls_and_mpls_eth',
5761 DLT => 'EN10MB',
5762 aliases => ['mpls and mpls'],
5763 opt => '
5764 (000) ldh [12]
5765 (001) jeq #0x8847 jt 2 jf 5
5766 (002) ldb [16]
5767 (003) jset #0x1 jt 5 jf 4
5768 (004) ret #262144
5769 (005) ret #0
5770 ',
5771 }, # mpls_and_mpls_eth
5772 {
5773 name => 'mpls_ppp_unary',
5774 DLT => 'PPP',
5775 aliases => ['mpls 100'],
5776 opt => '
5777 (000) ldh [2]
5778 (001) jeq #0x281 jt 2 jf 6
5779 (002) ld [4]
5780 (003) and #0xfffff000
5781 (004) jeq #0x64000 jt 5 jf 6
5782 (005) ret #262144
5783 (006) ret #0
5784 ',
5785 }, # mpls_ppp_unary
5786 {
5787 name => 'pppoes_mpls_unary',
5788 DLT => 'EN10MB',
5789 aliases => ['pppoes and mpls 123'],
5790 opt => '
5791 (000) ldh [12]
5792 (001) jeq #0x8864 jt 2 jf 8
5793 (002) ldh [20]
5794 (003) jeq #0x281 jt 4 jf 8
5795 (004) ld [22]
5796 (005) and #0xfffff000
5797 (006) jeq #0x7b000 jt 7 jf 8
5798 (007) ret #262144
5799 (008) ret #0
5800 ',
5801 }, # pppoes_mpls_unary
5802
5803 {
5804 name => 'vxlan_nullary',
5805 DLT => 'EN10MB',
5806 aliases => ['vxlan'],
5807 opt => '
5808 (000) ldh [12]
5809 (001) jeq #0x800 jt 2 jf 13
5810 (002) ldb [23]
5811 (003) jeq #0x11 jt 4 jf 21
5812 (004) ldh [20]
5813 (005) jset #0x1fff jt 21 jf 6
5814 (006) ldxb 4*([14]&0xf)
5815 (007) ldh [x + 16]
5816 (008) jeq #0x12b5 jt 9 jf 21
5817 (009) ldb [x + 22]
5818 (010) jeq #0x8 jt 11 jf 21
5819 (011) txa
5820 (012) jeq x jt 20 jf 21
5821 (013) jeq #0x86dd jt 14 jf 21
5822 (014) ldb [20]
5823 (015) jeq #0x11 jt 16 jf 21
5824 (016) ldh [56]
5825 (017) jeq #0x12b5 jt 18 jf 21
5826 (018) ldb [62]
5827 (019) jeq #0x8 jt 20 jf 21
5828 (020) ret #262144
5829 (021) ret #0
5830 ',
5831 }, # vxlan_nullary
5832 {
5833 name => 'vxlan_unary',
5834 DLT => 'EN10MB',
5835 aliases => ['vxlan 12345'],
5836 opt => '
5837 (000) ldh [12]
5838 (001) jeq #0x800 jt 2 jf 16
5839 (002) ldb [23]
5840 (003) jeq #0x11 jt 4 jf 27
5841 (004) ldh [20]
5842 (005) jset #0x1fff jt 27 jf 6
5843 (006) ldxb 4*([14]&0xf)
5844 (007) ldh [x + 16]
5845 (008) jeq #0x12b5 jt 9 jf 27
5846 (009) ldb [x + 22]
5847 (010) jeq #0x8 jt 11 jf 27
5848 (011) ld [x + 26]
5849 (012) and #0xffffff00
5850 (013) jeq #0x303900 jt 14 jf 27
5851 (014) txa
5852 (015) jeq x jt 26 jf 27
5853 (016) jeq #0x86dd jt 17 jf 27
5854 (017) ldb [20]
5855 (018) jeq #0x11 jt 19 jf 27
5856 (019) ldh [56]
5857 (020) jeq #0x12b5 jt 21 jf 27
5858 (021) ldb [62]
5859 (022) jeq #0x8 jt 23 jf 27
5860 (023) ld [66]
5861 (024) and #0xffffff00
5862 (025) jeq #0x303900 jt 26 jf 27
5863 (026) ret #262144
5864 (027) ret #0
5865 ',
5866 }, # vxlan_unary
5867 {
5868 name => 'vxlan_and_vxlan',
5869 DLT => 'EN10MB',
5870 aliases => ['vxlan and vxlan'],
5871 opt => '
5872 (000) ldh [12]
5873 (001) jeq #0x800 jt 2 jf 13
5874 (002) ldb [23]
5875 (003) jeq #0x11 jt 4 jf 75
5876 (004) ldh [20]
5877 (005) jset #0x1fff jt 75 jf 6
5878 (006) ldxb 4*([14]&0xf)
5879 (007) ldh [x + 16]
5880 (008) jeq #0x12b5 jt 9 jf 75
5881 (009) ldb [x + 22]
5882 (010) jeq #0x8 jt 11 jf 75
5883 (011) txa
5884 (012) jeq x jt 23 jf 75
5885 (013) jeq #0x86dd jt 14 jf 75
5886 (014) ldb [20]
5887 (015) jeq #0x11 jt 16 jf 75
5888 (016) ldh [56]
5889 (017) jeq #0x12b5 jt 18 jf 75
5890 (018) ldb [62]
5891 (019) jeq #0x8 jt 20 jf 75
5892 (020) ldx #0x28
5893 (021) txa
5894 (022) jeq #0x28 jt 23 jf 23
5895 (023) add #22
5896 (024) add #8
5897 (025) add #12
5898 (026) st M[1]
5899 (027) add #2
5900 (028) tax
5901 (029) stx M[2]
5902 (030) ld #0x0
5903 (031) jeq #0x0 jt 32 jf 32
5904 (032) ldx M[1]
5905 (033) ldh [x + 0]
5906 (034) jeq #0x800 jt 35 jf 62
5907 (035) ldx M[2]
5908 (036) ldb [x + 9]
5909 (037) jeq #0x11 jt 38 jf 75
5910 (038) ldh [x + 6]
5911 (039) jset #0x1fff jt 75 jf 40
5912 (040) ldb [x + 0]
5913 (041) and #0xf
5914 (042) lsh #2
5915 (043) add x
5916 (044) tax
5917 (045) ldh [x + 2]
5918 (046) jeq #0x12b5 jt 47 jf 75
5919 (047) ldx M[2]
5920 (048) ldb [x + 0]
5921 (049) and #0xf
5922 (050) lsh #2
5923 (051) add x
5924 (052) tax
5925 (053) ldb [x + 8]
5926 (054) jeq #0x8 jt 55 jf 75
5927 (055) ldx M[2]
5928 (056) ldb [x + 0]
5929 (057) and #0xf
5930 (058) lsh #2
5931 (059) add x
5932 (060) tax
5933 (061) jeq x jt 74 jf 75
5934 (062) jeq #0x86dd jt 63 jf 75
5935 (063) ldx M[2]
5936 (064) ldb [x + 6]
5937 (065) jeq #0x11 jt 66 jf 75
5938 (066) ldh [x + 42]
5939 (067) jeq #0x12b5 jt 68 jf 75
5940 (068) ldb [x + 48]
5941 (069) jeq #0x8 jt 70 jf 75
5942 (070) ld #0x28
5943 (071) add x
5944 (072) tax
5945 (073) jeq x jt 74 jf 75
5946 (074) ret #262144
5947 (075) ret #0
5948 ',
5949 }, # vxlan_and_vxlan
5950 {
5951 name => 'geneve_nullary',
5952 DLT => 'EN10MB',
5953 aliases => ['geneve'],
5954 unopt => '
5955 (000) ldh [12]
5956 (001) jeq #0x800 jt 2 jf 16
5957 (002) ldb [23]
5958 (003) jeq #0x11 jt 4 jf 16
5959 (004) ldh [20]
5960 (005) jset #0x1fff jt 16 jf 6
5961 (006) ldxb 4*([14]&0xf)
5962 (007) ldh [x + 16]
5963 (008) jeq #0x17c1 jt 9 jf 16
5964 (009) ldxb 4*([14]&0xf)
5965 (010) ldb [x + 22]
5966 (011) and #0xc0
5967 (012) jeq #0x0 jt 13 jf 16
5968 (013) ldxb 4*([14]&0xf)
5969 (014) txa
5970 (015) jeq x jt 28 jf 16
5971 (016) ldh [12]
5972 (017) jeq #0x86dd jt 18 jf 50
5973 (018) ldb [20]
5974 (019) jeq #0x11 jt 20 jf 50
5975 (020) ldh [56]
5976 (021) jeq #0x17c1 jt 22 jf 50
5977 (022) ldb [62]
5978 (023) and #0xc0
5979 (024) jeq #0x0 jt 25 jf 50
5980 (025) ld #0x28
5981 (026) tax
5982 (027) jeq x jt 28 jf 50
5983 (028) add #22
5984 (029) tax
5985 (030) add #2
5986 (031) st M[0]
5987 (032) ldb [x + 0]
5988 (033) and #0x3f
5989 (034) mul #4
5990 (035) add #8
5991 (036) add x
5992 (037) st M[1]
5993 (038) ldh [x + 2]
5994 (039) ldx M[1]
5995 (040) jeq #0x6558 jt 41 jf 46
5996 (041) txa
5997 (042) add #12
5998 (043) st M[0]
5999 (044) add #2
6000 (045) tax
6001 (046) stx M[2]
6002 (047) ld #0x0
6003 (048) jeq #0x0 jt 49 jf 50
6004 (049) ret #262144
6005 (050) ret #0
6006 ',
6007 }, # geneve_nullary
6008 {
6009 name => 'geneve_unary',
6010 DLT => 'EN10MB',
6011 aliases => ['geneve 12345'],
6012 unopt => '
6013 (000) ldh [12]
6014 (001) jeq #0x800 jt 2 jf 20
6015 (002) ldb [23]
6016 (003) jeq #0x11 jt 4 jf 20
6017 (004) ldh [20]
6018 (005) jset #0x1fff jt 20 jf 6
6019 (006) ldxb 4*([14]&0xf)
6020 (007) ldh [x + 16]
6021 (008) jeq #0x17c1 jt 9 jf 20
6022 (009) ldxb 4*([14]&0xf)
6023 (010) ldb [x + 22]
6024 (011) and #0xc0
6025 (012) jeq #0x0 jt 13 jf 20
6026 (013) ldxb 4*([14]&0xf)
6027 (014) ld [x + 26]
6028 (015) and #0xffffff00
6029 (016) jeq #0x303900 jt 17 jf 20
6030 (017) ldxb 4*([14]&0xf)
6031 (018) txa
6032 (019) jeq x jt 35 jf 20
6033 (020) ldh [12]
6034 (021) jeq #0x86dd jt 22 jf 57
6035 (022) ldb [20]
6036 (023) jeq #0x11 jt 24 jf 57
6037 (024) ldh [56]
6038 (025) jeq #0x17c1 jt 26 jf 57
6039 (026) ldb [62]
6040 (027) and #0xc0
6041 (028) jeq #0x0 jt 29 jf 57
6042 (029) ld [66]
6043 (030) and #0xffffff00
6044 (031) jeq #0x303900 jt 32 jf 57
6045 (032) ld #0x28
6046 (033) tax
6047 (034) jeq x jt 35 jf 57
6048 (035) add #22
6049 (036) tax
6050 (037) add #2
6051 (038) st M[0]
6052 (039) ldb [x + 0]
6053 (040) and #0x3f
6054 (041) mul #4
6055 (042) add #8
6056 (043) add x
6057 (044) st M[1]
6058 (045) ldh [x + 2]
6059 (046) ldx M[1]
6060 (047) jeq #0x6558 jt 48 jf 53
6061 (048) txa
6062 (049) add #12
6063 (050) st M[0]
6064 (051) add #2
6065 (052) tax
6066 (053) stx M[2]
6067 (054) ld #0x0
6068 (055) jeq #0x0 jt 56 jf 57
6069 (056) ret #262144
6070 (057) ret #0
6071 ',
6072 }, # geneve_unary
6073 {
6074 name => 'geneve_and_geneve',
6075 DLT => 'EN10MB',
6076 aliases => ['geneve and geneve'],
6077 unopt => '
6078 (000) ldh [12]
6079 (001) jeq #0x800 jt 2 jf 16
6080 (002) ldb [23]
6081 (003) jeq #0x11 jt 4 jf 16
6082 (004) ldh [20]
6083 (005) jset #0x1fff jt 16 jf 6
6084 (006) ldxb 4*([14]&0xf)
6085 (007) ldh [x + 16]
6086 (008) jeq #0x17c1 jt 9 jf 16
6087 (009) ldxb 4*([14]&0xf)
6088 (010) ldb [x + 22]
6089 (011) and #0xc0
6090 (012) jeq #0x0 jt 13 jf 16
6091 (013) ldxb 4*([14]&0xf)
6092 (014) txa
6093 (015) jeq x jt 28 jf 16
6094 (016) ldh [12]
6095 (017) jeq #0x86dd jt 18 jf 123
6096 (018) ldb [20]
6097 (019) jeq #0x11 jt 20 jf 123
6098 (020) ldh [56]
6099 (021) jeq #0x17c1 jt 22 jf 123
6100 (022) ldb [62]
6101 (023) and #0xc0
6102 (024) jeq #0x0 jt 25 jf 123
6103 (025) ld #0x28
6104 (026) tax
6105 (027) jeq x jt 28 jf 123
6106 (028) add #22
6107 (029) tax
6108 (030) add #2
6109 (031) st M[0]
6110 (032) ldb [x + 0]
6111 (033) and #0x3f
6112 (034) mul #4
6113 (035) add #8
6114 (036) add x
6115 (037) st M[1]
6116 (038) ldh [x + 2]
6117 (039) ldx M[1]
6118 (040) jeq #0x6558 jt 41 jf 46
6119 (041) txa
6120 (042) add #12
6121 (043) st M[0]
6122 (044) add #2
6123 (045) tax
6124 (046) stx M[2]
6125 (047) ld #0x0
6126 (048) jeq #0x0 jt 49 jf 123
6127 (049) ldx M[0]
6128 (050) ldh [x + 0]
6129 (051) jeq #0x800 jt 52 jf 83
6130 (052) ldx M[2]
6131 (053) ldb [x + 9]
6132 (054) jeq #0x11 jt 55 jf 83
6133 (055) ldx M[2]
6134 (056) ldh [x + 6]
6135 (057) jset #0x1fff jt 83 jf 58
6136 (058) ldx M[2]
6137 (059) ldb [x + 0]
6138 (060) and #0xf
6139 (061) lsh #2
6140 (062) add x
6141 (063) tax
6142 (064) ldh [x + 2]
6143 (065) jeq #0x17c1 jt 66 jf 83
6144 (066) ldx M[2]
6145 (067) ldb [x + 0]
6146 (068) and #0xf
6147 (069) lsh #2
6148 (070) add x
6149 (071) tax
6150 (072) ldb [x + 8]
6151 (073) and #0xc0
6152 (074) jeq #0x0 jt 75 jf 83
6153 (075) ldx M[2]
6154 (076) ldb [x + 0]
6155 (077) and #0xf
6156 (078) lsh #2
6157 (079) add x
6158 (080) tax
6159 (081) txa
6160 (082) jeq x jt 101 jf 83
6161 (083) ldx M[0]
6162 (084) ldh [x + 0]
6163 (085) jeq #0x86dd jt 86 jf 123
6164 (086) ldx M[2]
6165 (087) ldb [x + 6]
6166 (088) jeq #0x11 jt 89 jf 123
6167 (089) ldx M[2]
6168 (090) ldh [x + 42]
6169 (091) jeq #0x17c1 jt 92 jf 123
6170 (092) ldx M[2]
6171 (093) ldb [x + 48]
6172 (094) and #0xc0
6173 (095) jeq #0x0 jt 96 jf 123
6174 (096) ldx M[2]
6175 (097) ld #0x28
6176 (098) add x
6177 (099) tax
6178 (100) jeq x jt 101 jf 123
6179 (101) add #8
6180 (102) tax
6181 (103) add #2
6182 (104) st M[3]
6183 (105) ldb [x + 0]
6184 (106) and #0x3f
6185 (107) mul #4
6186 (108) add #8
6187 (109) add x
6188 (110) st M[4]
6189 (111) ldh [x + 2]
6190 (112) ldx M[4]
6191 (113) jeq #0x6558 jt 114 jf 119
6192 (114) txa
6193 (115) add #12
6194 (116) st M[3]
6195 (117) add #2
6196 (118) tax
6197 (119) stx M[5]
6198 (120) ld #0x0
6199 (121) jeq #0x0 jt 122 jf 123
6200 (122) ret #262144
6201 (123) ret #0
6202 ',
6203 }, # geneve_and_geneve
6204
6205 {
6206 name => 'wlan_host',
6207 DLT => 'IEEE802_11',
6208 aliases => [
6209 'wlan host 12:34:56:78:9a:bc',
6210 'wlan src or dst host 12:34:56:78:9a:bc',
6211 'wlan src or dst 12:34:56:78:9a:bc',
6212 ],
6213 opt => '
6214 (000) ldb [0]
6215 (001) jset #0x4 jt 33 jf 2
6216 (002) jset #0x8 jt 3 jf 24
6217 (003) ldb [1]
6218 (004) jset #0x2 jt 5 jf 14
6219 (005) jset #0x1 jt 6 jf 10
6220 (006) ld [26]
6221 (007) jeq #0x56789abc jt 8 jf 20
6222 (008) ldh [24]
6223 (009) jeq #0x1234 jt 32 jf 20
6224 (010) ld [18]
6225 (011) jeq #0x56789abc jt 12 jf 28
6226 (012) ldh [16]
6227 (013) jeq #0x1234 jt 32 jf 28
6228 (014) ld [12]
6229 (015) jeq #0x56789abc jt 16 jf 18
6230 (016) ldh [10]
6231 (017) jeq #0x1234 jt 32 jf 18
6232 (018) ldb [1]
6233 (019) jset #0x1 jt 20 jf 28
6234 (020) ld [18]
6235 (021) jeq #0x56789abc jt 22 jf 33
6236 (022) ldh [16]
6237 (023) jeq #0x1234 jt 32 jf 33
6238 (024) ld [12]
6239 (025) jeq #0x56789abc jt 26 jf 28
6240 (026) ldh [10]
6241 (027) jeq #0x1234 jt 32 jf 28
6242 (028) ld [6]
6243 (029) jeq #0x56789abc jt 30 jf 33
6244 (030) ldh [4]
6245 (031) jeq #0x1234 jt 32 jf 33
6246 (032) ret #262144
6247 (033) ret #0
6248 ',
6249 }, # wlan_host
6250 {
6251 name => 'wlan_src_host',
6252 DLT => 'IEEE802_11',
6253 aliases => [
6254 'wlan src host 12:34:56:78:9a:bc',
6255 'wlan src 12:34:56:78:9a:bc',
6256 ],
6257 opt => '
6258 (000) ldb [0]
6259 (001) jset #0x4 jt 19 jf 2
6260 (002) jset #0x8 jt 3 jf 14
6261 (003) ldb [1]
6262 (004) jset #0x2 jt 5 jf 14
6263 (005) jset #0x1 jt 6 jf 10
6264 (006) ld [26]
6265 (007) jeq #0x56789abc jt 8 jf 19
6266 (008) ldh [24]
6267 (009) jeq #0x1234 jt 18 jf 19
6268 (010) ld [18]
6269 (011) jeq #0x56789abc jt 12 jf 19
6270 (012) ldh [16]
6271 (013) jeq #0x1234 jt 18 jf 19
6272 (014) ld [12]
6273 (015) jeq #0x56789abc jt 16 jf 19
6274 (016) ldh [10]
6275 (017) jeq #0x1234 jt 18 jf 19
6276 (018) ret #262144
6277 (019) ret #0
6278 ',
6279 }, # wlan_src_host
6280 {
6281 name => 'wlan_dst_host',
6282 DLT => 'IEEE802_11',
6283 aliases => [
6284 'wlan dst host 12:34:56:78:9a:bc',
6285 'wlan dst 12:34:56:78:9a:bc',
6286 ],
6287 opt => '
6288 (000) ldb [0]
6289 (001) jset #0x4 jt 14 jf 2
6290 (002) jset #0x8 jt 3 jf 9
6291 (003) ldb [1]
6292 (004) jset #0x1 jt 5 jf 9
6293 (005) ld [18]
6294 (006) jeq #0x56789abc jt 7 jf 14
6295 (007) ldh [16]
6296 (008) jeq #0x1234 jt 13 jf 14
6297 (009) ld [6]
6298 (010) jeq #0x56789abc jt 11 jf 14
6299 (011) ldh [4]
6300 (012) jeq #0x1234 jt 13 jf 14
6301 (013) ret #262144
6302 (014) ret #0
6303 ',
6304 }, # wlan_dst_host
6305 {
6306 name => 'wlan_ra',
6307 DLT => 'IEEE802_11',
6308 aliases => ['wlan ra 12:34:56:78:9a:bc'],
6309 opt => '
6310 (000) ldb [0]
6311 (001) jset #0x8 jt 2 jf 7
6312 (002) ld [6]
6313 (003) jeq #0x56789abc jt 4 jf 7
6314 (004) ldh [4]
6315 (005) jeq #0x1234 jt 6 jf 7
6316 (006) ret #262144
6317 (007) ret #0
6318 ',
6319 }, # wlan_ra
6320 {
6321 name => 'wlan_ta',
6322 DLT => 'IEEE802_11',
6323 aliases => ['wlan ta 12:34:56:78:9a:bc'],
6324 opt => '
6325 (000) ldb [0]
6326 (001) jset #0x8 jt 2 jf 15
6327 (002) and #0xc
6328 (003) jeq #0x4 jt 4 jf 10
6329 (004) ldb [0]
6330 (005) and #0xf0
6331 (006) jeq #0xc0 jt 15 jf 7
6332 (007) ldb [0]
6333 (008) and #0xf0
6334 (009) jeq #0xd0 jt 15 jf 10
6335 (010) ld [12]
6336 (011) jeq #0x56789abc jt 12 jf 15
6337 (012) ldh [10]
6338 (013) jeq #0x1234 jt 14 jf 15
6339 (014) ret #262144
6340 (015) ret #0
6341 ',
6342 }, # wlan_ta
6343 {
6344 name => 'wlan_addr1',
6345 DLT => 'IEEE802_11',
6346 aliases => [
6347 'wlan addr1 12:34:56:78:9a:bc',
6348 'wlan address1 12:34:56:78:9a:bc',
6349 ],
6350 opt => '
6351 (000) ld [6]
6352 (001) jeq #0x56789abc jt 2 jf 5
6353 (002) ldh [4]
6354 (003) jeq #0x1234 jt 4 jf 5
6355 (004) ret #262144
6356 (005) ret #0
6357 ',
6358 }, # wlan_addr1
6359 {
6360 name => 'wlan_addr2',
6361 DLT => 'IEEE802_11',
6362 aliases => [
6363 'wlan addr2 12:34:56:78:9a:bc',
6364 'wlan address2 12:34:56:78:9a:bc',
6365 ],
6366 opt => '
6367 (000) ldb [0]
6368 (001) and #0xc
6369 (002) jeq #0x4 jt 3 jf 9
6370 (003) ldb [0]
6371 (004) and #0xf0
6372 (005) jeq #0xc0 jt 14 jf 6
6373 (006) ldb [0]
6374 (007) and #0xf0
6375 (008) jeq #0xd0 jt 14 jf 9
6376 (009) ld [12]
6377 (010) jeq #0x56789abc jt 11 jf 14
6378 (011) ldh [10]
6379 (012) jeq #0x1234 jt 13 jf 14
6380 (013) ret #262144
6381 (014) ret #0
6382 ',
6383 }, # wlan_addr2
6384 {
6385 name => 'wlan_addr3',
6386 DLT => 'IEEE802_11',
6387 aliases => [
6388 'wlan addr3 12:34:56:78:9a:bc',
6389 'wlan address3 12:34:56:78:9a:bc',
6390 ],
6391 opt => '
6392 (000) ldb [0]
6393 (001) and #0xc
6394 (002) jeq #0x4 jt 8 jf 3
6395 (003) ld [18]
6396 (004) jeq #0x56789abc jt 5 jf 8
6397 (005) ldh [16]
6398 (006) jeq #0x1234 jt 7 jf 8
6399 (007) ret #262144
6400 (008) ret #0
6401 ',
6402 }, # wlan_addr3
6403 {
6404 name => 'wlan_addr4',
6405 DLT => 'IEEE802_11',
6406 aliases => [
6407 'wlan addr4 12:34:56:78:9a:bc',
6408 'wlan address4 12:34:56:78:9a:bc',
6409 ],
6410 opt => '
6411 (000) ldb [1]
6412 (001) and #0x3
6413 (002) jeq #0x3 jt 3 jf 8
6414 (003) ld [26]
6415 (004) jeq #0x56789abc jt 5 jf 8
6416 (005) ldh [24]
6417 (006) jeq #0x1234 jt 7 jf 8
6418 (007) ret #262144
6419 (008) ret #0
6420 ',
6421 }, # wlan_addr4
6422 {
6423 name => 'wlan_type_mgt',
6424 DLT => 'IEEE802_11',
6425 aliases => [
6426 'wlan type mgt',
6427 'type mgt',
6428 'wlan type 0',
6429 'type 0',
6430 'wlan type management',
6431 'type management',
6432 ],
6433 opt => '
6434 (000) ldb [0]
6435 (001) jset #0xc jt 2 jf 3
6436 (002) ret #0
6437 (003) ret #262144
6438 ',
6439 }, # type_mgt
6440 {
6441 name => 'wlan_subtype_assoc_req',
6442 DLT => 'IEEE802_11',
6443 aliases => [
6444 'wlan subtype assoc-req',
6445 'subtype assoc-req',
6446 'wlan type mgt subtype assoc-req',
6447 'type mgt subtype assoc-req',
6448 'wlan type 0 subtype assoc-req',
6449 'type 0 subtype assoc-req',
6450 'wlan type mgt subtype 0x00',
6451 'type mgt subtype 0x00',
6452 'wlan type 0 subtype 0x00',
6453 'type 0 subtype 0x00',
6454 'wlan subtype assocreq',
6455 'subtype assocreq',
6456 'wlan type mgt subtype assocreq',
6457 'type mgt subtype assocreq',
6458 'wlan type 0 subtype assocreq',
6459 'type 0 subtype assocreq',
6460 'wlan type management subtype assoc-req',
6461 'type management subtype assoc-req',
6462 'wlan type management subtype 0x00',
6463 'type management subtype 0x00',
6464 'wlan type management subtype assocreq',
6465 'type management subtype assocreq',
6466 ],
6467 opt => '
6468 (000) ldb [0]
6469 (001) jset #0xfc jt 2 jf 3
6470 (002) ret #0
6471 (003) ret #262144
6472 ',
6473 }, # wlan_type_mgt_subtype_assoc_req
6474 {
6475 name => 'wlan_subtype_assoc_resp',
6476 DLT => 'IEEE802_11',
6477 aliases => [
6478 'wlan subtype assoc-resp',
6479 'subtype assoc-resp',
6480 'wlan type mgt subtype assoc-resp',
6481 'type mgt subtype assoc-resp',
6482 'wlan type 0 subtype assoc-resp',
6483 'type 0 subtype assoc-resp',
6484 'wlan type mgt subtype 0x10',
6485 'type mgt subtype 0x10',
6486 'wlan type 0 subtype 0x10',
6487 'type 0 subtype 0x10',
6488 'wlan subtype assocresp',
6489 'subtype assocresp',
6490 'wlan type mgt subtype assocresp',
6491 'type mgt subtype assocresp',
6492 'wlan type 0 subtype assocresp',
6493 'type 0 subtype assocresp',
6494 'wlan type management subtype assoc-resp',
6495 'type management subtype assoc-resp',
6496 'wlan type management subtype 0x10',
6497 'type management subtype 0x10',
6498 'wlan type management subtype assocresp',
6499 'type management subtype assocresp',
6500 ],
6501 opt => '
6502 (000) ldb [0]
6503 (001) and #0xfc
6504 (002) jeq #0x10 jt 3 jf 4
6505 (003) ret #262144
6506 (004) ret #0
6507 ',
6508 }, # wlan_subtype_assoc_resp
6509 {
6510 name => 'wlan_subtype_reassoc_req',
6511 DLT => 'IEEE802_11',
6512 aliases => [
6513 'wlan subtype reassoc-req',
6514 'subtype reassoc-req',
6515 'wlan type mgt subtype reassoc-req',
6516 'type mgt subtype reassoc-req',
6517 'wlan type 0 subtype reassoc-req',
6518 'type 0 subtype reassoc-req',
6519 'wlan type mgt subtype 0x20',
6520 'type mgt subtype 0x20',
6521 'wlan type 0 subtype 0x20',
6522 'type 0 subtype 0x20',
6523 'wlan subtype reassocreq',
6524 'subtype reassocreq',
6525 'wlan type mgt subtype reassocreq',
6526 'type mgt subtype reassocreq',
6527 'wlan type 0 subtype reassocreq',
6528 'type 0 subtype reassocreq',
6529 'wlan type management subtype reassoc-req',
6530 'type management subtype reassoc-req',
6531 'wlan type management subtype 0x20',
6532 'type management subtype 0x20',
6533 'wlan type management subtype reassocreq',
6534 'type management subtype reassocreq',
6535 ],
6536 opt => '
6537 (000) ldb [0]
6538 (001) and #0xfc
6539 (002) jeq #0x20 jt 3 jf 4
6540 (003) ret #262144
6541 (004) ret #0
6542 ',
6543 }, # wlan_subtype_reassoc_req
6544 {
6545 name => 'wlan_subtype_reassoc_resp',
6546 DLT => 'IEEE802_11',
6547 aliases => [
6548 'wlan subtype reassoc-resp',
6549 'subtype reassoc-resp',
6550 'wlan type mgt subtype reassoc-resp',
6551 'type mgt subtype reassoc-resp',
6552 'wlan type 0 subtype reassoc-resp',
6553 'type 0 subtype reassoc-resp',
6554 'wlan type mgt subtype 0x30',
6555 'type mgt subtype 0x30',
6556 'wlan type 0 subtype 0x30',
6557 'type 0 subtype 0x30',
6558 'wlan subtype reassocresp',
6559 'subtype reassocresp',
6560 'wlan type mgt subtype reassocresp',
6561 'type mgt subtype reassocresp',
6562 'wlan type 0 subtype reassocresp',
6563 'type 0 subtype reassocresp',
6564 'wlan type management subtype reassoc-resp',
6565 'type management subtype reassoc-resp',
6566 'wlan type management subtype 0x30',
6567 'type management subtype 0x30',
6568 'wlan type management subtype reassocresp',
6569 'type management subtype reassocresp',
6570 ],
6571 opt => '
6572 (000) ldb [0]
6573 (001) and #0xfc
6574 (002) jeq #0x30 jt 3 jf 4
6575 (003) ret #262144
6576 (004) ret #0
6577 ',
6578 }, # wlan_mgt_subtype_reassoc_resp
6579 {
6580 name => 'wlan_subtype_probe_req',
6581 DLT => 'IEEE802_11',
6582 aliases => [
6583 'wlan subtype probe-req',
6584 'subtype probe-req',
6585 'wlan type mgt subtype probe-req',
6586 'type mgt subtype probe-req',
6587 'wlan type 0 subtype probe-req',
6588 'type 0 subtype probe-req',
6589 'wlan type mgt subtype 0x40',
6590 'type mgt subtype 0x40',
6591 'wlan type 0 subtype 0x40',
6592 'type 0 subtype 0x40',
6593 'wlan subtype probereq',
6594 'subtype probereq',
6595 'wlan type mgt subtype probereq',
6596 'type mgt subtype probereq',
6597 'wlan type 0 subtype probereq',
6598 'type 0 subtype probereq',
6599 'wlan type management subtype probe-req',
6600 'type management subtype probe-req',
6601 'wlan type management subtype 0x40',
6602 'type management subtype 0x40',
6603 'wlan type management subtype probereq',
6604 'type management subtype probereq',
6605 ],
6606 opt => '
6607 (000) ldb [0]
6608 (001) and #0xfc
6609 (002) jeq #0x40 jt 3 jf 4
6610 (003) ret #262144
6611 (004) ret #0
6612 ',
6613 }, # wlan_subtype_probe_req
6614 {
6615 name => 'wlan_subtype_probe_resp',
6616 DLT => 'IEEE802_11',
6617 aliases => [
6618 'wlan subtype probe-resp',
6619 'subtype probe-resp',
6620 'wlan type mgt subtype probe-resp',
6621 'type mgt subtype probe-resp',
6622 'wlan type 0 subtype probe-resp',
6623 'type 0 subtype probe-resp',
6624 'wlan type mgt subtype 0x50',
6625 'type mgt subtype 0x50',
6626 'wlan type 0 subtype 0x50',
6627 'type 0 subtype 0x50',
6628 'wlan subtype proberesp',
6629 'subtype proberesp',
6630 'wlan type mgt subtype proberesp',
6631 'type mgt subtype proberesp',
6632 'wlan type 0 subtype proberesp',
6633 'type 0 subtype proberesp',
6634 'wlan type management subtype probe-resp',
6635 'type management subtype probe-resp',
6636 'wlan type management subtype 0x50',
6637 'type management subtype 0x50',
6638 'wlan type management subtype proberesp',
6639 'type management subtype proberesp',
6640 ],
6641 opt => '
6642 (000) ldb [0]
6643 (001) and #0xfc
6644 (002) jeq #0x50 jt 3 jf 4
6645 (003) ret #262144
6646 (004) ret #0
6647 ',
6648 }, # wlan_subtype_probe_resp
6649 {
6650 name => 'wlan_subtype_beacon',
6651 DLT => 'IEEE802_11',
6652 aliases => [
6653 'wlan subtype beacon',
6654 'subtype beacon',
6655 'wlan type mgt subtype beacon',
6656 'type mgt subtype beacon',
6657 'wlan type 0 subtype beacon',
6658 'type 0 subtype beacon',
6659 'wlan type mgt subtype 0x80',
6660 'type mgt subtype 0x80',
6661 'wlan type 0 subtype 0x80',
6662 'type 0 subtype 0x80',
6663 'wlan type management subtype beacon',
6664 'type management subtype beacon',
6665 'wlan type management subtype 0x80',
6666 'type management subtype 0x80',
6667 ],
6668 opt => '
6669 (000) ldb [0]
6670 (001) and #0xfc
6671 (002) jeq #0x80 jt 3 jf 4
6672 (003) ret #262144
6673 (004) ret #0
6674 ',
6675 }, # wlan_subtype_beacon
6676 {
6677 name => 'wlan_subtype_atim',
6678 DLT => 'IEEE802_11',
6679 aliases => [
6680 'wlan subtype atim',
6681 'subtype atim',
6682 'wlan type mgt subtype atim',
6683 'type mgt subtype atim',
6684 'wlan type 0 subtype atim',
6685 'type 0 subtype atim',
6686 'wlan type mgt subtype 0x90',
6687 'type mgt subtype 0x90',
6688 'wlan type 0 subtype 0x90',
6689 'type 0 subtype 0x90',
6690 'wlan type management subtype atim',
6691 'type management subtype atim',
6692 'wlan type management subtype 0x90',
6693 'type management subtype 0x90',
6694 ],
6695 opt => '
6696 (000) ldb [0]
6697 (001) and #0xfc
6698 (002) jeq #0x90 jt 3 jf 4
6699 (003) ret #262144
6700 (004) ret #0
6701 ',
6702 }, # wlan_subtype_atim
6703 {
6704 name => 'wlan_subtype_disassoc',
6705 DLT => 'IEEE802_11',
6706 aliases => [
6707 'wlan subtype disassoc',
6708 'subtype disassoc',
6709 'wlan type mgt subtype disassoc',
6710 'type mgt subtype disassoc',
6711 'wlan type 0 subtype disassoc',
6712 'type 0 subtype disassoc',
6713 'wlan type mgt subtype 0xa0',
6714 'type mgt subtype 0xa0',
6715 'wlan type 0 subtype 0xa0',
6716 'type 0 subtype 0xa0',
6717 'wlan subtype disassociation',
6718 'subtype disassociation',
6719 'wlan type mgt subtype disassociation',
6720 'type mgt subtype disassociation',
6721 'wlan type 0 subtype disassociation',
6722 'type 0 subtype disassociation',
6723 'wlan type management subtype disassoc',
6724 'type management subtype disassoc',
6725 'wlan type management subtype 0xa0',
6726 'type management subtype 0xa0',
6727 'wlan type management subtype disassociation',
6728 'type management subtype disassociation',
6729 ],
6730 opt => '
6731 (000) ldb [0]
6732 (001) and #0xfc
6733 (002) jeq #0xa0 jt 3 jf 4
6734 (003) ret #262144
6735 (004) ret #0
6736 ',
6737 }, # wlan_subtype_disassoc
6738 {
6739 name => 'wlan_subtype_auth',
6740 DLT => 'IEEE802_11',
6741 aliases => [
6742 'wlan subtype auth',
6743 'subtype auth',
6744 'wlan type mgt subtype auth',
6745 'type mgt subtype auth',
6746 'wlan type 0 subtype auth',
6747 'type 0 subtype auth',
6748 'wlan type mgt subtype 0xb0',
6749 'type mgt subtype 0xb0',
6750 'wlan type 0 subtype 0xb0',
6751 'type 0 subtype 0xb0',
6752 'wlan subtype authentication',
6753 'subtype authentication',
6754 'wlan type mgt subtype authentication',
6755 'type mgt subtype authentication',
6756 'wlan type 0 subtype authentication',
6757 'type 0 subtype authentication',
6758 'wlan type management subtype auth',
6759 'type management subtype auth',
6760 'wlan type management subtype 0xb0',
6761 'type management subtype 0xb0',
6762 'wlan type management subtype authentication',
6763 'type management subtype authentication',
6764 ],
6765 opt => '
6766 (000) ldb [0]
6767 (001) and #0xfc
6768 (002) jeq #0xb0 jt 3 jf 4
6769 (003) ret #262144
6770 (004) ret #0
6771 ',
6772 }, # wlan_subtype_auth
6773 {
6774 name => 'wlan_subtype_deauth',
6775 DLT => 'IEEE802_11',
6776 aliases => [
6777 'wlan subtype deauth',
6778 'subtype deauth',
6779 'wlan type mgt subtype deauth',
6780 'type mgt subtype deauth',
6781 'wlan type 0 subtype deauth',
6782 'type 0 subtype deauth',
6783 'wlan type mgt subtype 0xc0',
6784 'type mgt subtype 0xc0',
6785 'wlan type 0 subtype 0xc0',
6786 'type 0 subtype 0xc0',
6787 'wlan subtype deauthentication',
6788 'subtype deauthentication',
6789 'wlan type mgt subtype deauthentication',
6790 'type mgt subtype deauthentication',
6791 'wlan type 0 subtype deauthentication',
6792 'type 0 subtype deauthentication',
6793 'wlan type management subtype deauth',
6794 'type management subtype deauth',
6795 'wlan type management subtype 0xc0',
6796 'type management subtype 0xc0',
6797 'wlan type management subtype deauthentication',
6798 'type management subtype deauthentication',
6799 ],
6800 opt => '
6801 (000) ldb [0]
6802 (001) and #0xfc
6803 (002) jeq #0xc0 jt 3 jf 4
6804 (003) ret #262144
6805 (004) ret #0
6806 ',
6807 }, # wlan_subtype_deauth
6808 {
6809 name => 'wlan_type_ctl',
6810 DLT => 'IEEE802_11',
6811 aliases => [
6812 'wlan type ctl',
6813 'type ctl',
6814 'wlan type 4',
6815 'type 4',
6816 'wlan type control',
6817 'type control',
6818 ],
6819 opt => '
6820 (000) ldb [0]
6821 (001) and #0xc
6822 (002) jeq #0x4 jt 3 jf 4
6823 (003) ret #262144
6824 (004) ret #0
6825 ',
6826 }, # type_ctl
6827 {
6828 name => 'wlan_subtype_bar',
6829 DLT => 'IEEE802_11',
6830 aliases => [
6831 'wlan subtype bar',
6832 'subtype bar',
6833 'wlan type ctl subtype bar',
6834 'type ctl subtype bar',
6835 'wlan type 4 subtype bar',
6836 'type 4 subtype bar',
6837 'wlan type ctl subtype 0x80',
6838 'type ctl subtype 0x80',
6839 'wlan type 4 subtype 0x80',
6840 'type 4 subtype 0x80',
6841 'wlan type control subtype bar',
6842 'type control subtype bar',
6843 'wlan type control subtype 0x80',
6844 'type control subtype 0x80',
6845 ],
6846 opt => '
6847 (000) ldb [0]
6848 (001) and #0xfc
6849 (002) jeq #0x84 jt 3 jf 4
6850 (003) ret #262144
6851 (004) ret #0
6852 ',
6853 }, # wlan_subtype_bar
6854 {
6855 name => 'wlan_subtype_ba',
6856 DLT => 'IEEE802_11',
6857 aliases => [
6858 'wlan subtype ba',
6859 'subtype ba',
6860 'wlan type ctl subtype ba',
6861 'type ctl subtype ba',
6862 'wlan type 4 subtype ba',
6863 'type 4 subtype ba',
6864 'wlan type ctl subtype 0x90',
6865 'type ctl subtype 0x90',
6866 'wlan type 4 subtype 0x90',
6867 'type 4 subtype 0x90',
6868 'wlan type control subtype ba',
6869 'type control subtype ba',
6870 'wlan type control subtype 0x90',
6871 'type control subtype 0x90',
6872 ],
6873 opt => '
6874 (000) ldb [0]
6875 (001) and #0xfc
6876 (002) jeq #0x94 jt 3 jf 4
6877 (003) ret #262144
6878 (004) ret #0
6879 ',
6880 }, # wlan_subtype_ba
6881 {
6882 name => 'wlan_subtype_ps_poll',
6883 DLT => 'IEEE802_11',
6884 aliases => [
6885 'wlan subtype ps-poll',
6886 'subtype ps-poll',
6887 'wlan type ctl subtype ps-poll',
6888 'type ctl subtype ps-poll',
6889 'wlan type 4 subtype ps-poll',
6890 'type 4 subtype ps-poll',
6891 'wlan type ctl subtype 0xa0',
6892 'type ctl subtype 0xa0',
6893 'wlan type 4 subtype 0xa0',
6894 'type 4 subtype 0xa0',
6895 'wlan type control subtype ps-poll',
6896 'type control subtype ps-poll',
6897 'wlan type control subtype 0xa0',
6898 'type control subtype 0xa0',
6899 ],
6900 opt => '
6901 (000) ldb [0]
6902 (001) and #0xfc
6903 (002) jeq #0xa4 jt 3 jf 4
6904 (003) ret #262144
6905 (004) ret #0
6906 ',
6907 }, # wlan_subtype_ps_poll
6908 {
6909 name => 'wlan_subtype_rts',
6910 DLT => 'IEEE802_11',
6911 aliases => [
6912 'wlan subtype rts',
6913 'subtype rts',
6914 'wlan type ctl subtype rts',
6915 'type ctl subtype rts',
6916 'wlan type 4 subtype rts',
6917 'type 4 subtype rts',
6918 'wlan type ctl subtype 0xb0',
6919 'type ctl subtype 0xb0',
6920 'wlan type 4 subtype 0xb0',
6921 'type 4 subtype 0xb0',
6922 'wlan type control subtype rts',
6923 'type control subtype rts',
6924 'wlan type control subtype 0xb0',
6925 'type control subtype 0xb0',
6926 ],
6927 opt => '
6928 (000) ldb [0]
6929 (001) and #0xfc
6930 (002) jeq #0xb4 jt 3 jf 4
6931 (003) ret #262144
6932 (004) ret #0
6933 ',
6934 }, # wlan_subtype_rts
6935 {
6936 name => 'wlan_subtype_cts',
6937 DLT => 'IEEE802_11',
6938 aliases => [
6939 'wlan subtype cts',
6940 'subtype cts',
6941 'wlan type ctl subtype cts',
6942 'type ctl subtype cts',
6943 'wlan type 4 subtype cts',
6944 'type 4 subtype cts',
6945 'wlan type ctl subtype 0xc0',
6946 'type ctl subtype 0xc0',
6947 'wlan type 4 subtype 0xc0',
6948 'type 4 subtype 0xc0',
6949 'wlan type control subtype cts',
6950 'type control subtype cts',
6951 'wlan type control subtype 0xc0',
6952 'type control subtype 0xc0',
6953 ],
6954 opt => '
6955 (000) ldb [0]
6956 (001) and #0xfc
6957 (002) jeq #0xc4 jt 3 jf 4
6958 (003) ret #262144
6959 (004) ret #0
6960 ',
6961 }, # wlan_subtype_cts
6962 {
6963 name => 'wlan_subtype_ack',
6964 DLT => 'IEEE802_11',
6965 aliases => [
6966 'wlan subtype ack',
6967 'subtype ack',
6968 'wlan type ctl subtype ack',
6969 'type ctl subtype ack',
6970 'wlan type 4 subtype ack',
6971 'type 4 subtype ack',
6972 'wlan type ctl subtype 0xd0',
6973 'type ctl subtype 0xd0',
6974 'wlan type 4 subtype 0xd0',
6975 'type 4 subtype 0xd0',
6976 'wlan type control subtype ack',
6977 'type control subtype ack',
6978 'wlan type control subtype 0xd0',
6979 'type control subtype 0xd0',
6980 ],
6981 opt => '
6982 (000) ldb [0]
6983 (001) and #0xfc
6984 (002) jeq #0xd4 jt 3 jf 4
6985 (003) ret #262144
6986 (004) ret #0
6987 ',
6988 }, # wlan_subtype_ack
6989 {
6990 name => 'wlan_subtype_cf_end',
6991 DLT => 'IEEE802_11',
6992 aliases => [
6993 'wlan subtype cf-end',
6994 'subtype cf-end',
6995 'wlan type ctl subtype cf-end',
6996 'type ctl subtype cf-end',
6997 'wlan type 4 subtype cf-end',
6998 'type 4 subtype cf-end',
6999 'wlan type ctl subtype 0xe0',
7000 'type ctl subtype 0xe0',
7001 'wlan type 4 subtype 0xe0',
7002 'type 4 subtype 0xe0',
7003 'wlan type control subtype cf-end',
7004 'type control subtype cf-end',
7005 'wlan type control subtype 0xe0',
7006 'type control subtype 0xe0',
7007 ],
7008 opt => '
7009 (000) ldb [0]
7010 (001) and #0xfc
7011 (002) jeq #0xe4 jt 3 jf 4
7012 (003) ret #262144
7013 (004) ret #0
7014 ',
7015 }, # wlan_subtype_cf_end
7016 {
7017 name => 'wlan_subtype_cf_end_ack',
7018 DLT => 'IEEE802_11',
7019 aliases => [
7020 'wlan subtype cf-end-ack',
7021 'subtype cf-end-ack',
7022 'wlan type ctl subtype cf-end-ack',
7023 'type ctl subtype cf-end-ack',
7024 'wlan type 4 subtype cf-end-ack',
7025 'type 4 subtype cf-end-ack',
7026 'wlan type ctl subtype 0xf0',
7027 'type ctl subtype 0xf0',
7028 'wlan type 4 subtype 0xf0',
7029 'type 4 subtype 0xf0',
7030 'wlan type control subtype cf-end-ack',
7031 'type control subtype cf-end-ack',
7032 'wlan type control subtype 0xf0',
7033 'type control subtype 0xf0',
7034 ],
7035 opt => '
7036 (000) ldb [0]
7037 (001) and #0xfc
7038 (002) jeq #0xf4 jt 3 jf 4
7039 (003) ret #262144
7040 (004) ret #0
7041 ',
7042 }, # wlan_subtype_cf_end_ack
7043 {
7044 name => 'wlan_type_data',
7045 DLT => 'IEEE802_11',
7046 aliases => [
7047 'wlan type data',
7048 'type data',
7049 'wlan type 8',
7050 'type 8',
7051 ],
7052 opt => '
7053 (000) ldb [0]
7054 (001) and #0xc
7055 (002) jeq #0x8 jt 3 jf 4
7056 (003) ret #262144
7057 (004) ret #0
7058 ',
7059 }, # wlan_type_data
7060 {
7061 name => 'wlan_subtype_data',
7062 DLT => 'IEEE802_11',
7063 aliases => [
7064 'wlan subtype data',
7065 'subtype data',
7066 'wlan type data subtype data',
7067 'type data subtype data',
7068 'wlan type 8 subtype data',
7069 'type 8 subtype data',
7070 'wlan type data subtype 0x00',
7071 'type data subtype 0x00',
7072 'wlan type 8 subtype 0x00',
7073 'type 8 subtype 0x00',
7074 ],
7075 opt => '
7076 (000) ldb [0]
7077 (001) and #0xfc
7078 (002) jeq #0x8 jt 3 jf 4
7079 (003) ret #262144
7080 (004) ret #0
7081 ',
7082 }, # wlan_subtype_data
7083 {
7084 name => 'wlan_subtype_data_cf_ack',
7085 DLT => 'IEEE802_11',
7086 aliases => [
7087 'wlan subtype data-cf-ack',
7088 'subtype data-cf-ack',
7089 'wlan type data subtype data-cf-ack',
7090 'type data subtype data-cf-ack',
7091 'wlan type 8 subtype data-cf-ack',
7092 'type 8 subtype data-cf-ack',
7093 'wlan type data subtype 0x10',
7094 'type data subtype 0x10',
7095 'wlan type 8 subtype 0x10',
7096 'type 8 subtype 0x10',
7097 ],
7098 opt => '
7099 (000) ldb [0]
7100 (001) and #0xfc
7101 (002) jeq #0x18 jt 3 jf 4
7102 (003) ret #262144
7103 (004) ret #0
7104 ',
7105 }, # wlan_subtype_data_cf_ack
7106 {
7107 name => 'wlan_subtype_data_cf_poll',
7108 DLT => 'IEEE802_11',
7109 aliases => [
7110 'wlan subtype data-cf-poll',
7111 'subtype data-cf-poll',
7112 'wlan type data subtype data-cf-poll',
7113 'type data subtype data-cf-poll',
7114 'wlan type 8 subtype data-cf-poll',
7115 'type 8 subtype data-cf-poll',
7116 'wlan type data subtype 0x20',
7117 'type data subtype 0x20',
7118 'wlan type 8 subtype 0x20',
7119 'type 8 subtype 0x20',
7120 ],
7121 opt => '
7122 (000) ldb [0]
7123 (001) and #0xfc
7124 (002) jeq #0x28 jt 3 jf 4
7125 (003) ret #262144
7126 (004) ret #0
7127 ',
7128 }, # wlan_subtype_data_cf_poll
7129 {
7130 name => 'wlan_subtype_data_cf_ack_poll',
7131 DLT => 'IEEE802_11',
7132 aliases => [
7133 'wlan subtype data-cf-ack-poll',
7134 'subtype data-cf-ack-poll',
7135 'wlan type data subtype data-cf-ack-poll',
7136 'type data subtype data-cf-ack-poll',
7137 'wlan type 8 subtype data-cf-ack-poll',
7138 'type 8 subtype data-cf-ack-poll',
7139 'wlan type data subtype 0x30',
7140 'type data subtype 0x30',
7141 'wlan type 8 subtype 0x30',
7142 'type 8 subtype 0x30',
7143 ],
7144 opt => '
7145 (000) ldb [0]
7146 (001) and #0xfc
7147 (002) jeq #0x38 jt 3 jf 4
7148 (003) ret #262144
7149 (004) ret #0
7150 ',
7151 }, # wlan_subtype_data_cf_ack_poll
7152 {
7153 name => 'wlan_subtype_null',
7154 DLT => 'IEEE802_11',
7155 aliases => [
7156 'wlan subtype null',
7157 'subtype null',
7158 'wlan type data subtype null',
7159 'type data subtype null',
7160 'wlan type 8 subtype null',
7161 'type 8 subtype null',
7162 'wlan type data subtype 0x40',
7163 'type data subtype 0x40',
7164 'wlan type 8 subtype 0x40',
7165 'type 8 subtype 0x40',
7166 ],
7167 opt => '
7168 (000) ldb [0]
7169 (001) and #0xfc
7170 (002) jeq #0x48 jt 3 jf 4
7171 (003) ret #262144
7172 (004) ret #0
7173 ',
7174 }, # wlan_subtype_null
7175 {
7176 name => 'wlan_subtype_cf_ack',
7177 DLT => 'IEEE802_11',
7178 aliases => [
7179 'wlan subtype cf-ack',
7180 'subtype cf-ack',
7181 'wlan type data subtype cf-ack',
7182 'type data subtype cf-ack',
7183 'wlan type 8 subtype cf-ack',
7184 'type 8 subtype cf-ack',
7185 'wlan type data subtype 0x50',
7186 'type data subtype 0x50',
7187 'wlan type 8 subtype 0x50',
7188 'type 8 subtype 0x50',
7189 ],
7190 opt => '
7191 (000) ldb [0]
7192 (001) and #0xfc
7193 (002) jeq #0x58 jt 3 jf 4
7194 (003) ret #262144
7195 (004) ret #0
7196 ',
7197 }, # wlan_subtype_cf_ack
7198 {
7199 name => 'wlan_subtype_cf_poll',
7200 DLT => 'IEEE802_11',
7201 aliases => [
7202 'wlan subtype cf-poll',
7203 'subtype cf-poll',
7204 'wlan type data subtype cf-poll',
7205 'type data subtype cf-poll',
7206 'wlan type 8 subtype cf-poll',
7207 'type 8 subtype cf-poll',
7208 'wlan type data subtype 0x60',
7209 'type data subtype 0x60',
7210 'wlan type 8 subtype 0x60',
7211 'type 8 subtype 0x60',
7212 ],
7213 opt => '
7214 (000) ldb [0]
7215 (001) and #0xfc
7216 (002) jeq #0x68 jt 3 jf 4
7217 (003) ret #262144
7218 (004) ret #0
7219 ',
7220 }, # wlan_subtype_cf_poll
7221 {
7222 name => 'wlan_subtype_cf_ack_poll',
7223 DLT => 'IEEE802_11',
7224 aliases => [
7225 'wlan subtype cf-ack-poll',
7226 'subtype cf-ack-poll',
7227 'wlan type data subtype cf-ack-poll',
7228 'type data subtype cf-ack-poll',
7229 'wlan type 8 subtype cf-ack-poll',
7230 'type 8 subtype cf-ack-poll',
7231 'wlan type data subtype 0x70',
7232 'type data subtype 0x70',
7233 'wlan type 8 subtype 0x70',
7234 'type 8 subtype 0x70',
7235 ],
7236 opt => '
7237 (000) ldb [0]
7238 (001) and #0xfc
7239 (002) jeq #0x78 jt 3 jf 4
7240 (003) ret #262144
7241 (004) ret #0
7242 ',
7243 }, # wlan_subtype_cf_ack_poll
7244 {
7245 name => 'wlan_subtype_qos_data',
7246 DLT => 'IEEE802_11',
7247 aliases => [
7248 'wlan subtype qos-data',
7249 'subtype qos-data',
7250 'wlan type data subtype qos-data',
7251 'type data subtype qos-data',
7252 'wlan type 8 subtype qos-data',
7253 'type 8 subtype qos-data',
7254 'wlan type data subtype 0x80',
7255 'type data subtype 0x80',
7256 'wlan type 8 subtype 0x80',
7257 'type 8 subtype 0x80',
7258 ],
7259 opt => '
7260 (000) ldb [0]
7261 (001) and #0xfc
7262 (002) jeq #0x88 jt 3 jf 4
7263 (003) ret #262144
7264 (004) ret #0
7265 ',
7266 }, # wlan_subtype_qos_data
7267 {
7268 name => 'wlan_subtype_qos_data_cf_ack',
7269 DLT => 'IEEE802_11',
7270 aliases => [
7271 'wlan subtype qos-data-cf-ack',
7272 'subtype qos-data-cf-ack',
7273 'wlan type data subtype qos-data-cf-ack',
7274 'type data subtype qos-data-cf-ack',
7275 'wlan type 8 subtype qos-data-cf-ack',
7276 'type 8 subtype qos-data-cf-ack',
7277 'wlan type data subtype 0x90',
7278 'type data subtype 0x90',
7279 'wlan type 8 subtype 0x90',
7280 'type 8 subtype 0x90',
7281 ],
7282 opt => '
7283 (000) ldb [0]
7284 (001) and #0xfc
7285 (002) jeq #0x98 jt 3 jf 4
7286 (003) ret #262144
7287 (004) ret #0
7288 ',
7289 }, # wlan_subtype_qos_data_cf_ack
7290 {
7291 name => 'wlan_subtype_qos_data_cf_poll',
7292 DLT => 'IEEE802_11',
7293 aliases => [
7294 'wlan subtype qos-data-cf-poll',
7295 'subtype qos-data-cf-poll',
7296 'wlan type data subtype qos-data-cf-poll',
7297 'type data subtype qos-data-cf-poll',
7298 'wlan type 8 subtype qos-data-cf-poll',
7299 'type 8 subtype qos-data-cf-poll',
7300 'wlan type data subtype 0xa0',
7301 'type data subtype 0xa0',
7302 'wlan type 8 subtype 0xa0',
7303 'type 8 subtype 0xa0',
7304 ],
7305 opt => '
7306 (000) ldb [0]
7307 (001) and #0xfc
7308 (002) jeq #0xa8 jt 3 jf 4
7309 (003) ret #262144
7310 (004) ret #0
7311 ',
7312 }, # wlan_subtype_qos_data_cf_poll
7313 {
7314 name => 'wlan_subtype_qos_data_cf_ack_poll',
7315 DLT => 'IEEE802_11',
7316 aliases => [
7317 'wlan subtype qos-data-cf-ack-poll',
7318 'subtype qos-data-cf-ack-poll',
7319 'wlan type data subtype qos-data-cf-ack-poll',
7320 'type data subtype qos-data-cf-ack-poll',
7321 'wlan type 8 subtype qos-data-cf-ack-poll',
7322 'type 8 subtype qos-data-cf-ack-poll',
7323 'wlan type data subtype 0xb0',
7324 'type data subtype 0xb0',
7325 'wlan type 8 subtype 0xb0',
7326 'type 8 subtype 0xb0',
7327 ],
7328 opt => '
7329 (000) ldb [0]
7330 (001) and #0xfc
7331 (002) jeq #0xb8 jt 3 jf 4
7332 (003) ret #262144
7333 (004) ret #0
7334 ',
7335 }, # wlan_subtype_qos_data_cf_ack_poll
7336 {
7337 name => 'wlan_subtype_qos',
7338 DLT => 'IEEE802_11',
7339 aliases => [
7340 'wlan subtype qos',
7341 'subtype qos',
7342 'wlan type data subtype qos',
7343 'type data subtype qos',
7344 'wlan type 8 subtype qos',
7345 'type 8 subtype qos',
7346 'wlan type data subtype 0xc0',
7347 'type data subtype 0xc0',
7348 'wlan type 8 subtype 0xc0',
7349 'type 8 subtype 0xc0',
7350 ],
7351 opt => '
7352 (000) ldb [0]
7353 (001) and #0xfc
7354 (002) jeq #0xc8 jt 3 jf 4
7355 (003) ret #262144
7356 (004) ret #0
7357 ',
7358 }, # wlan_subtype_qos
7359 {
7360 name => 'wlan_subtype_qos_cf_poll',
7361 DLT => 'IEEE802_11',
7362 aliases => [
7363 'wlan subtype qos-cf-poll',
7364 'subtype qos-cf-poll',
7365 'wlan type data subtype qos-cf-poll',
7366 'type data subtype qos-cf-poll',
7367 'wlan type 8 subtype qos-cf-poll',
7368 'type 8 subtype qos-cf-poll',
7369 'wlan type data subtype 0xe0',
7370 'type data subtype 0xe0',
7371 'wlan type 8 subtype 0xe0',
7372 'type 8 subtype 0xe0',
7373 ],
7374 opt => '
7375 (000) ldb [0]
7376 (001) and #0xfc
7377 (002) jeq #0xe8 jt 3 jf 4
7378 (003) ret #262144
7379 (004) ret #0
7380 ',
7381 }, # wlan_subtype_qos_cf_poll
7382 {
7383 name => 'wlan_subtype_qos_cf_ack_poll',
7384 DLT => 'IEEE802_11',
7385 aliases => [
7386 'wlan subtype qos-cf-ack-poll',
7387 'subtype qos-cf-ack-poll',
7388 'wlan type data subtype qos-cf-ack-poll',
7389 'type data subtype qos-cf-ack-poll',
7390 'wlan type 8 subtype qos-cf-ack-poll',
7391 'type 8 subtype qos-cf-ack-poll',
7392 'wlan type data subtype 0xf0',
7393 'type data subtype 0xf0',
7394 'wlan type 8 subtype 0xf0',
7395 'type 8 subtype 0xf0',
7396 ],
7397 opt => '
7398 (000) ldb [0]
7399 (001) and #0xfc
7400 (002) jeq #0xf8 jt 3 jf 4
7401 (003) ret #262144
7402 (004) ret #0
7403 ',
7404 }, # wlan_subtype_qos_cf_ack_poll
7405 {
7406 name => 'wlan_type_reserved',
7407 DLT => 'IEEE802_11',
7408 # Reserved frame type, no name.
7409 aliases => [
7410 'wlan type 12',
7411 'type 12',
7412 ],
7413 opt => '
7414 (000) ldb [0]
7415 (001) and #0xc
7416 (002) jeq #0xc jt 3 jf 4
7417 (003) ret #262144
7418 (004) ret #0
7419 ',
7420 }, # wlan_type_reserved
7421 {
7422 name => 'wlan_dir_nods',
7423 DLT => 'IEEE802_11',
7424 aliases => [
7425 'wlan dir nods',
7426 'wlan dir 0',
7427 'dir nods',
7428 'dir 0',
7429 'wlan direction nods',
7430 'wlan direction 0',
7431 'direction nods',
7432 'direction 0',
7433 ],
7434 opt => '
7435 (000) ldb [1]
7436 (001) jset #0x3 jt 2 jf 3
7437 (002) ret #0
7438 (003) ret #262144
7439 ',
7440 }, # wlan_dir_nods
7441 {
7442 name => 'wlan_dir_tods',
7443 DLT => 'IEEE802_11',
7444 aliases => [
7445 'wlan dir tods',
7446 'wlan dir 1',
7447 'dir tods',
7448 'dir 1',
7449 'wlan direction tods',
7450 'wlan direction 1',
7451 'direction tods',
7452 'direction 1',
7453 ],
7454 opt => '
7455 (000) ldb [1]
7456 (001) and #0x3
7457 (002) jeq #0x1 jt 3 jf 4
7458 (003) ret #262144
7459 (004) ret #0
7460 ',
7461 }, # wlan_dir_tods
7462 {
7463 name => 'wlan_dir_fromds',
7464 DLT => 'IEEE802_11',
7465 aliases => [
7466 'wlan dir fromds',
7467 'wlan dir 2',
7468 'dir fromds',
7469 'dir 2',
7470 'wlan direction fromds',
7471 'wlan direction 2',
7472 'direction fromds',
7473 'direction 2',
7474 ],
7475 opt => '
7476 (000) ldb [1]
7477 (001) and #0x3
7478 (002) jeq #0x2 jt 3 jf 4
7479 (003) ret #262144
7480 (004) ret #0
7481 ',
7482 }, # wlan_dir_fromds
7483 {
7484 name => 'wlan_dir_dstods',
7485 DLT => 'IEEE802_11',
7486 aliases => [
7487 'wlan dir dstods',
7488 'wlan dir 3',
7489 'dir dstods',
7490 'dir 3',
7491 'wlan direction dstods',
7492 'wlan direction 3',
7493 'direction dstods',
7494 'direction 3',
7495 ],
7496 opt => '
7497 (000) ldb [1]
7498 (001) and #0x3
7499 (002) jeq #0x3 jt 3 jf 4
7500 (003) ret #262144
7501 (004) ret #0
7502 ',
7503 }, # wlan_dir_dstods
7504 # For the other DLTs that "wlan dir" supports as well test only one
7505 # alias and only one direction -- the only difference is the
7506 # DLT-specific preamble, and the many equivalent ways to spell what
7507 # follows have already been tested above.
7508 {
7509 name => 'wlan_dir_fromds_IEEE802_11_RADIO',
7510 DLT => 'IEEE802_11_RADIO',
7511 aliases => ['wlan dir fromds'],
7512 opt => '
7513 (000) ldb [3]
7514 (001) lsh #8
7515 (002) tax
7516 (003) ldb [2]
7517 (004) or x
7518 (005) tax
7519 (006) ldb [x + 1]
7520 (007) and #0x3
7521 (008) jeq #0x2 jt 9 jf 10
7522 (009) ret #262144
7523 (010) ret #0
7524 ',
7525 }, # wlan_dir_fromds_IEEE802_11_RADIO
7526 {
7527 name => 'wlan_dir_fromds_IEEE802_11_RADIO_AVS',
7528 DLT => 'IEEE802_11_RADIO_AVS',
7529 aliases => ['wlan dir fromds'],
7530 opt => '
7531 (000) ld [4]
7532 (001) tax
7533 (002) ldb [x + 1]
7534 (003) and #0x3
7535 (004) jeq #0x2 jt 5 jf 6
7536 (005) ret #262144
7537 (006) ret #0
7538 ',
7539 }, # wlan_dir_fromds_IEEE802_11_RADIO_AVS
7540 {
7541 name => 'wlan_dir_fromds_PRISM_HEADER',
7542 DLT => 'PRISM_HEADER',
7543 aliases => ['wlan dir fromds'],
7544 unopt => '
7545 (000) ld [0]
7546 (001) and #0xfffff000
7547 (002) jeq #0x80211000 jt 3 jf 5
7548 (003) ld [4]
7549 (004) ja 6
7550 (005) ld #0x90
7551 (006) st M[0]
7552 (007) tax
7553 (008) ldx M[0]
7554 (009) ldb [x + 1]
7555 (010) and #0x3
7556 (011) jeq #0x2 jt 12 jf 13
7557 (012) ret #262144
7558 (013) ret #0
7559 ',
7560 }, # wlan_dir_fromds_PRISM_HEADER
7561 {
7562 name => 'wlan_dir_fromds_PPI',
7563 DLT => 'PPI',
7564 aliases => ['wlan dir fromds'],
7565 opt => '
7566 (000) ld [4]
7567 (001) jeq #0x69000000 jt 2 jf 12
7568 (002) ldb [3]
7569 (003) lsh #8
7570 (004) tax
7571 (005) ldb [2]
7572 (006) or x
7573 (007) tax
7574 (008) ldb [x + 1]
7575 (009) and #0x3
7576 (010) jeq #0x2 jt 11 jf 12
7577 (011) ret #262144
7578 (012) ret #0
7579 ',
7580 }, # wlan_dir_fromds_PPI
7581
7582 {
7583 name => 'pppoed',
7584 snaplen => 200,
7585 DLT => 'EN10MB',
7586 aliases => ['pppoed'],
7587 unopt => '
7588 (000) ldh [12]
7589 (001) jeq #0x8863 jt 2 jf 3
7590 (002) ret #200
7591 (003) ret #0
7592 ',
7593 }, # pppoed
7594 {
7595 name => 'pppoes_nullary',
7596 snaplen => 200,
7597 DLT => 'EN10MB',
7598 aliases => ['pppoes'],
7599 unopt => '
7600 (000) ldh [12]
7601 (001) jeq #0x8864 jt 2 jf 3
7602 (002) ret #200
7603 (003) ret #0
7604 ',
7605 }, # pppoes_nullary
7606 {
7607 name => 'pppoes_unary',
7608 snaplen => 200,
7609 DLT => 'EN10MB',
7610 aliases => ['pppoes 1234'],
7611 unopt => '
7612 (000) ldh [12]
7613 (001) jeq #0x8864 jt 2 jf 5
7614 (002) ldh [16]
7615 (003) jeq #0x4d2 jt 4 jf 5
7616 (004) ret #200
7617 (005) ret #0
7618 ',
7619 }, # pppoes_unary
7620
7621 {
7622 name => 'llc_nullary',
7623 snaplen => 200,
7624 DLT => 'EN10MB',
7625 aliases => ['llc'],
7626 unopt => '
7627 (000) ldh [12]
7628 (001) jgt #0x5dc jt 4 jf 2
7629 (002) ldh [14]
7630 (003) jeq #0xffff jt 4 jf 5
7631 (004) ret #0
7632 (005) ret #200
7633 ',
7634 }, # llc_nullary
7635 {
7636 name => 'llc_i',
7637 snaplen => 100,
7638 DLT => 'EN10MB',
7639 aliases => ['llc i'],
7640 unopt => '
7641 (000) ldh [12]
7642 (001) jgt #0x5dc jt 6 jf 2
7643 (002) ldh [14]
7644 (003) jeq #0xffff jt 6 jf 4
7645 (004) ldb [16]
7646 (005) jset #0x1 jt 6 jf 7
7647 (006) ret #0
7648 (007) ret #100
7649 ',
7650 }, # llc_i
7651 {
7652 name => 'llc_s',
7653 snaplen => 100,
7654 DLT => 'EN10MB',
7655 aliases => ['llc s'],
7656 unopt => '
7657 (000) ldh [12]
7658 (001) jgt #0x5dc jt 8 jf 2
7659 (002) ldh [14]
7660 (003) jeq #0xffff jt 8 jf 4
7661 (004) ldb [16]
7662 (005) and #0x3
7663 (006) jeq #0x1 jt 7 jf 8
7664 (007) ret #100
7665 (008) ret #0
7666 ',
7667 }, # llc_s
7668 {
7669 name => 'llc_u',
7670 snaplen => 100,
7671 DLT => 'EN10MB',
7672 aliases => ['llc u'],
7673 unopt => '
7674 (000) ldh [12]
7675 (001) jgt #0x5dc jt 8 jf 2
7676 (002) ldh [14]
7677 (003) jeq #0xffff jt 8 jf 4
7678 (004) ldb [16]
7679 (005) and #0x3
7680 (006) jeq #0x3 jt 7 jf 8
7681 (007) ret #100
7682 (008) ret #0
7683 ',
7684 }, # llc_u
7685 {
7686 name => 'llc_rr',
7687 snaplen => 100,
7688 DLT => 'EN10MB',
7689 aliases => ['llc rr'],
7690 unopt => '
7691 (000) ldh [12]
7692 (001) jgt #0x5dc jt 8 jf 2
7693 (002) ldh [14]
7694 (003) jeq #0xffff jt 8 jf 4
7695 (004) ldb [16]
7696 (005) and #0xf
7697 (006) jeq #0x1 jt 7 jf 8
7698 (007) ret #100
7699 (008) ret #0
7700 ',
7701 }, # llc_rr
7702 {
7703 name => 'llc_rnr',
7704 snaplen => 100,
7705 DLT => 'EN10MB',
7706 aliases => ['llc rnr'],
7707 unopt => '
7708 (000) ldh [12]
7709 (001) jgt #0x5dc jt 8 jf 2
7710 (002) ldh [14]
7711 (003) jeq #0xffff jt 8 jf 4
7712 (004) ldb [16]
7713 (005) and #0xf
7714 (006) jeq #0x5 jt 7 jf 8
7715 (007) ret #100
7716 (008) ret #0
7717 ',
7718 }, # llc_rnr
7719 {
7720 name => 'llc_rej',
7721 snaplen => 100,
7722 DLT => 'EN10MB',
7723 aliases => ['llc rej'],
7724 unopt => '
7725 (000) ldh [12]
7726 (001) jgt #0x5dc jt 8 jf 2
7727 (002) ldh [14]
7728 (003) jeq #0xffff jt 8 jf 4
7729 (004) ldb [16]
7730 (005) and #0xf
7731 (006) jeq #0x9 jt 7 jf 8
7732 (007) ret #100
7733 (008) ret #0
7734 ',
7735 }, # llc_rej
7736 {
7737 name => 'llc_ui',
7738 snaplen => 100,
7739 DLT => 'EN10MB',
7740 aliases => ['llc ui'],
7741 unopt => '
7742 (000) ldh [12]
7743 (001) jgt #0x5dc jt 8 jf 2
7744 (002) ldh [14]
7745 (003) jeq #0xffff jt 8 jf 4
7746 (004) ldb [16]
7747 (005) and #0xef
7748 (006) jeq #0x3 jt 7 jf 8
7749 (007) ret #100
7750 (008) ret #0
7751 ',
7752 }, # llc_ui
7753 {
7754 name => 'llc_ua',
7755 snaplen => 100,
7756 DLT => 'EN10MB',
7757 aliases => ['llc ua'],
7758 unopt => '
7759 (000) ldh [12]
7760 (001) jgt #0x5dc jt 8 jf 2
7761 (002) ldh [14]
7762 (003) jeq #0xffff jt 8 jf 4
7763 (004) ldb [16]
7764 (005) and #0xef
7765 (006) jeq #0x63 jt 7 jf 8
7766 (007) ret #100
7767 (008) ret #0
7768 ',
7769 }, # llc_ua
7770 {
7771 name => 'llc_disc',
7772 snaplen => 100,
7773 DLT => 'EN10MB',
7774 aliases => ['llc disc'],
7775 unopt => '
7776 (000) ldh [12]
7777 (001) jgt #0x5dc jt 8 jf 2
7778 (002) ldh [14]
7779 (003) jeq #0xffff jt 8 jf 4
7780 (004) ldb [16]
7781 (005) and #0xef
7782 (006) jeq #0x43 jt 7 jf 8
7783 (007) ret #100
7784 (008) ret #0
7785 ',
7786 }, # llc_disc
7787 {
7788 name => 'llc_dm',
7789 snaplen => 100,
7790 DLT => 'EN10MB',
7791 aliases => ['llc dm'],
7792 unopt => '
7793 (000) ldh [12]
7794 (001) jgt #0x5dc jt 8 jf 2
7795 (002) ldh [14]
7796 (003) jeq #0xffff jt 8 jf 4
7797 (004) ldb [16]
7798 (005) and #0xef
7799 (006) jeq #0xf jt 7 jf 8
7800 (007) ret #100
7801 (008) ret #0
7802 ',
7803 }, # llc_dm
7804 {
7805 name => 'llc_sabme',
7806 snaplen => 100,
7807 DLT => 'EN10MB',
7808 aliases => ['llc sabme'],
7809 unopt => '
7810 (000) ldh [12]
7811 (001) jgt #0x5dc jt 8 jf 2
7812 (002) ldh [14]
7813 (003) jeq #0xffff jt 8 jf 4
7814 (004) ldb [16]
7815 (005) and #0xef
7816 (006) jeq #0x6f jt 7 jf 8
7817 (007) ret #100
7818 (008) ret #0
7819 ',
7820 }, # llc_sabme
7821 {
7822 name => 'llc_test',
7823 snaplen => 100,
7824 DLT => 'EN10MB',
7825 aliases => ['llc test'],
7826 unopt => '
7827 (000) ldh [12]
7828 (001) jgt #0x5dc jt 8 jf 2
7829 (002) ldh [14]
7830 (003) jeq #0xffff jt 8 jf 4
7831 (004) ldb [16]
7832 (005) and #0xef
7833 (006) jeq #0xe3 jt 7 jf 8
7834 (007) ret #100
7835 (008) ret #0
7836 ',
7837 }, # llc_test
7838 {
7839 name => 'llc_xid',
7840 snaplen => 100,
7841 DLT => 'EN10MB',
7842 aliases => ['llc xid'],
7843 unopt => '
7844 (000) ldh [12]
7845 (001) jgt #0x5dc jt 8 jf 2
7846 (002) ldh [14]
7847 (003) jeq #0xffff jt 8 jf 4
7848 (004) ldb [16]
7849 (005) and #0xef
7850 (006) jeq #0xaf jt 7 jf 8
7851 (007) ret #100
7852 (008) ret #0
7853 ',
7854 }, # llc_xid
7855 {
7856 name => 'llc_frmr',
7857 snaplen => 100,
7858 DLT => 'EN10MB',
7859 aliases => ['llc frmr'],
7860 unopt => '
7861 (000) ldh [12]
7862 (001) jgt #0x5dc jt 8 jf 2
7863 (002) ldh [14]
7864 (003) jeq #0xffff jt 8 jf 4
7865 (004) ldb [16]
7866 (005) and #0xef
7867 (006) jeq #0x87 jt 7 jf 8
7868 (007) ret #100
7869 (008) ret #0
7870 ',
7871 }, # llc_frmr
7872 {
7873 name => 'llc_SUNATM',
7874 DLT => 'SUNATM',
7875 aliases => ['llc'],
7876 unopt => '
7877 (000) ldb [0]
7878 (001) and #0xf
7879 (002) jeq #0x2 jt 3 jf 4
7880 (003) ret #262144
7881 (004) ret #0
7882 ',
7883 }, # llc_SUNATM
7884 {
7885 name => 'llc_IEEE802',
7886 DLT => 'IEEE802',
7887 aliases => ['llc'],
7888 opt => '
7889 (000) ret #262144
7890 ',
7891 }, # llc_IEEE802
7892 {
7893 name => 'llc_FDDI',
7894 DLT => 'FDDI',
7895 aliases => ['llc'],
7896 opt => '
7897 (000) ret #262144
7898 ',
7899 }, # llc_FDDI
7900 {
7901 name => 'llc_ATM_RFC1483',
7902 DLT => 'ATM_RFC1483',
7903 aliases => ['llc'],
7904 opt => '
7905 (000) ret #262144
7906 ',
7907 }, # llc_ATM_RFC1483
7908 {
7909 name => 'llc_IEEE802_11',
7910 DLT => 'IEEE802_11',
7911 aliases => [
7912 'llc',
7913 'wlan type data',
7914 ],
7915 unopt => '
7916 (000) ldb [0]
7917 (001) and #0xc
7918 (002) jeq #0x8 jt 3 jf 4
7919 (003) ret #262144
7920 (004) ret #0
7921 ',
7922 }, # llc_IEEE802_11
7923 {
7924 name => 'llc_IEEE802_11_RADIO',
7925 DLT => 'IEEE802_11_RADIO',
7926 aliases => [
7927 'llc',
7928 'wlan type data',
7929 ],
7930 opt => '
7931 (000) ldb [3]
7932 (001) lsh #8
7933 (002) tax
7934 (003) ldb [2]
7935 (004) or x
7936 (005) tax
7937 (006) ldb [x + 0]
7938 (007) and #0xc
7939 (008) jeq #0x8 jt 9 jf 10
7940 (009) ret #262144
7941 (010) ret #0
7942 ',
7943 }, # llc_IEEE802_11_RADIO
7944 {
7945 name => 'llc_IEEE802_11_RADIO_AVS',
7946 DLT => 'IEEE802_11_RADIO_AVS',
7947 aliases => [
7948 'llc',
7949 'wlan type data',
7950 ],
7951 opt => '
7952 (000) ld [4]
7953 (001) tax
7954 (002) ldb [x + 0]
7955 (003) and #0xc
7956 (004) jeq #0x8 jt 5 jf 6
7957 (005) ret #262144
7958 (006) ret #0
7959 ',
7960 }, # llc_IEEE802_11_RADIO_AVS
7961 {
7962 name => 'llc_PRISM_HEADER',
7963 DLT => 'PRISM_HEADER',
7964 aliases => [
7965 'llc',
7966 'wlan type data',
7967 ],
7968 unopt => '
7969 (000) ld [0]
7970 (001) and #0xfffff000
7971 (002) jeq #0x80211000 jt 3 jf 5
7972 (003) ld [4]
7973 (004) ja 6
7974 (005) ld #0x90
7975 (006) st M[0]
7976 (007) tax
7977 (008) ldx M[0]
7978 (009) ldb [x + 0]
7979 (010) and #0xc
7980 (011) jeq #0x8 jt 12 jf 13
7981 (012) ret #262144
7982 (013) ret #0
7983 ',
7984 }, # llc_PRISM_HEADER
7985 {
7986 name => 'llc_PPI',
7987 DLT => 'PPI',
7988 aliases => [
7989 'llc',
7990 'wlan type data',
7991 ],
7992 opt => '
7993 (000) ld [4]
7994 (001) jeq #0x69000000 jt 2 jf 12
7995 (002) ldb [3]
7996 (003) lsh #8
7997 (004) tax
7998 (005) ldb [2]
7999 (006) or x
8000 (007) tax
8001 (008) ldb [x + 0]
8002 (009) and #0xc
8003 (010) jeq #0x8 jt 11 jf 12
8004 (011) ret #262144
8005 (012) ret #0
8006 ',
8007 }, # llc_PPI
8008
8009 {
8010 name => 'decnet_host',
8011 DLT => 'EN10MB',
8012 aliases => ['decnet host 50.764'],
8013 opt => '
8014 (000) ldh [12]
8015 (001) jeq #0x6003 jt 2 jf 39
8016 (002) ldb [16]
8017 (003) and #0x7
8018 (004) jeq #0x2 jt 5 jf 7
8019 (005) ldh [19]
8020 (006) jeq #0xfcca jt 38 jf 7
8021 (007) ldh [16]
8022 (008) and #0xff07
8023 (009) jeq #0x8102 jt 10 jf 12
8024 (010) ldh [20]
8025 (011) jeq #0xfcca jt 38 jf 12
8026 (012) ldb [16]
8027 (013) and #0x7
8028 (014) jeq #0x6 jt 15 jf 17
8029 (015) ldh [31]
8030 (016) jeq #0xfcca jt 38 jf 17
8031 (017) ldh [16]
8032 (018) and #0xff07
8033 (019) jeq #0x8106 jt 20 jf 22
8034 (020) ldh [32]
8035 (021) jeq #0xfcca jt 38 jf 22
8036 (022) ld [16]
8037 (023) and #0x7ffff00
8038 (024) jeq #0x2fcca00 jt 38 jf 25
8039 (025) ld [16]
8040 (026) and #0xff07ffff
8041 (027) jeq #0x8102fcca jt 38 jf 28
8042 (028) ldb [16]
8043 (029) and #0x7
8044 (030) jeq #0x6 jt 31 jf 33
8045 (031) ldh [23]
8046 (032) jeq #0xfcca jt 38 jf 33
8047 (033) ldh [16]
8048 (034) and #0xff07
8049 (035) jeq #0x8106 jt 36 jf 39
8050 (036) ldh [24]
8051 (037) jeq #0xfcca jt 38 jf 39
8052 (038) ret #262144
8053 (039) ret #0
8054 ',
8055 unopt => '
8056 (000) ldh [12]
8057 (001) jeq #0x6003 jt 2 jf 39
8058 (002) ldb [16]
8059 (003) and #0x7
8060 (004) jeq #0x2 jt 5 jf 7
8061 (005) ldh [19]
8062 (006) jeq #0xfcca jt 38 jf 7
8063 (007) ldh [16]
8064 (008) and #0xff07
8065 (009) jeq #0x8102 jt 10 jf 12
8066 (010) ldh [20]
8067 (011) jeq #0xfcca jt 38 jf 12
8068 (012) ldb [16]
8069 (013) and #0x7
8070 (014) jeq #0x6 jt 15 jf 17
8071 (015) ldh [31]
8072 (016) jeq #0xfcca jt 38 jf 17
8073 (017) ldh [16]
8074 (018) and #0xff07
8075 (019) jeq #0x8106 jt 20 jf 22
8076 (020) ldh [32]
8077 (021) jeq #0xfcca jt 38 jf 22
8078 (022) ld [16]
8079 (023) and #0x7ffff00
8080 (024) jeq #0x2fcca00 jt 38 jf 25
8081 (025) ld [16]
8082 (026) and #0xff07ffff
8083 (027) jeq #0x8102fcca jt 38 jf 28
8084 (028) ldb [16]
8085 (029) and #0x7
8086 (030) jeq #0x6 jt 31 jf 33
8087 (031) ldh [23]
8088 (032) jeq #0xfcca jt 38 jf 33
8089 (033) ldh [16]
8090 (034) and #0xff07
8091 (035) jeq #0x8106 jt 36 jf 39
8092 (036) ldh [24]
8093 (037) jeq #0xfcca jt 38 jf 39
8094 (038) ret #262144
8095 (039) ret #0
8096 ',
8097 }, # decnet_host
8098 {
8099 name => 'decnet_src_host',
8100 DLT => 'EN10MB',
8101 aliases => [
8102 'decnet src host 50.764',
8103 'decnet src 50.764',
8104 ],
8105 unopt => '
8106 (000) ldh [12]
8107 (001) jeq #0x6003 jt 2 jf 23
8108 (002) ldb [16]
8109 (003) and #0x7
8110 (004) jeq #0x2 jt 5 jf 7
8111 (005) ldh [19]
8112 (006) jeq #0xfcca jt 22 jf 7
8113 (007) ldh [16]
8114 (008) and #0xff07
8115 (009) jeq #0x8102 jt 10 jf 12
8116 (010) ldh [20]
8117 (011) jeq #0xfcca jt 22 jf 12
8118 (012) ldb [16]
8119 (013) and #0x7
8120 (014) jeq #0x6 jt 15 jf 17
8121 (015) ldh [31]
8122 (016) jeq #0xfcca jt 22 jf 17
8123 (017) ldh [16]
8124 (018) and #0xff07
8125 (019) jeq #0x8106 jt 20 jf 23
8126 (020) ldh [32]
8127 (021) jeq #0xfcca jt 22 jf 23
8128 (022) ret #262144
8129 (023) ret #0
8130 ',
8131 }, # decnet_src_host
8132 {
8133 name => 'decnet_dst_host',
8134 DLT => 'EN10MB',
8135 aliases => [
8136 'decnet dst host 50.764',
8137 'decnet dst 50.764',
8138 ],
8139 unopt => '
8140 (000) ldh [12]
8141 (001) jeq #0x6003 jt 2 jf 19
8142 (002) ld [16]
8143 (003) and #0x7ffff00
8144 (004) jeq #0x2fcca00 jt 18 jf 5
8145 (005) ld [16]
8146 (006) and #0xff07ffff
8147 (007) jeq #0x8102fcca jt 18 jf 8
8148 (008) ldb [16]
8149 (009) and #0x7
8150 (010) jeq #0x6 jt 11 jf 13
8151 (011) ldh [23]
8152 (012) jeq #0xfcca jt 18 jf 13
8153 (013) ldh [16]
8154 (014) and #0xff07
8155 (015) jeq #0x8106 jt 16 jf 19
8156 (016) ldh [24]
8157 (017) jeq #0xfcca jt 18 jf 19
8158 (018) ret #262144
8159 (019) ret #0
8160 ',
8161 }, # decnet_dst_host
8162
8163 {
8164 name => 'iso_proto_clnp',
8165 DLT => 'EN10MB',
8166 aliases => [
8167 'iso proto \clnp',
8168 'clnp',
8169 'iso proto 0x81',
8170 ],
8171 unopt => '
8172 (000) ldh [12]
8173 (001) jgt #0x5dc jt 7 jf 2
8174 (002) ldh [14]
8175 (003) jeq #0xfefe jt 4 jf 7
8176 (004) ldb [17]
8177 (005) jeq #0x81 jt 6 jf 7
8178 (006) ret #262144
8179 (007) ret #0
8180 ',
8181 }, # iso_proto_clnp
8182 {
8183 name => 'iso_proto_esis',
8184 DLT => 'EN10MB',
8185 aliases => [
8186 'iso proto \esis',
8187 'esis',
8188 'es-is',
8189 'iso proto 0x82',
8190 ],
8191 unopt => '
8192 (000) ldh [12]
8193 (001) jgt #0x5dc jt 7 jf 2
8194 (002) ldh [14]
8195 (003) jeq #0xfefe jt 4 jf 7
8196 (004) ldb [17]
8197 (005) jeq #0x82 jt 6 jf 7
8198 (006) ret #262144
8199 (007) ret #0
8200 ',
8201 }, # iso_proto_esis
8202 {
8203 name => 'iso_proto_isis',
8204 DLT => 'EN10MB',
8205 aliases => [
8206 'iso proto \isis',
8207 'isis',
8208 'is-is',
8209 'iso proto 0x83',
8210 ],
8211 unopt => '
8212 (000) ldh [12]
8213 (001) jgt #0x5dc jt 7 jf 2
8214 (002) ldh [14]
8215 (003) jeq #0xfefe jt 4 jf 7
8216 (004) ldb [17]
8217 (005) jeq #0x83 jt 6 jf 7
8218 (006) ret #262144
8219 (007) ret #0
8220 ',
8221 }, # iso_proto_isis
8222 # Test the DLT dimension of "iso proto" for one alias only.
8223 {
8224 name => 'iso_proto_clnp_FRELAY',
8225 DLT => 'FRELAY',
8226 aliases => ['iso proto \clnp'],
8227 unopt => '
8228 (000) ldh [2]
8229 (001) jeq #0x381 jt 2 jf 3
8230 (002) ret #262144
8231 (003) ret #0
8232 ',
8233 }, # clnp_FRELAY
8234 {
8235 name => 'iso_proto_clnp_C_HDLC',
8236 DLT => 'C_HDLC',
8237 aliases => ['iso proto \clnp'],
8238 unopt => '
8239 (000) ldh [2]
8240 (001) jeq #0xfefe jt 2 jf 5
8241 (002) ldb [5]
8242 (003) jeq #0x81 jt 4 jf 5
8243 (004) ret #262144
8244 (005) ret #0
8245 ',
8246 }, # clnp_C_HDLC
8247 {
8248 name => 'isis_l1',
8249 DLT => 'EN10MB',
8250 aliases => [
8251 'l1',
8252 'isis proto 0x1a or 0x18 or 0x12 or 0x0f or 0x11',
8253 ],
8254 opt => '
8255 (000) ldh [12]
8256 (001) jgt #0x5dc jt 22 jf 2
8257 (002) ldh [14]
8258 (003) jeq #0xfefe jt 4 jf 22
8259 (004) ldb [17]
8260 (005) jeq #0x83 jt 6 jf 22
8261 (006) ldb [21]
8262 (007) and #0x1f
8263 (008) jeq #0x1a jt 21 jf 9
8264 (009) ldb [21]
8265 (010) and #0x1f
8266 (011) jeq #0x18 jt 21 jf 12
8267 (012) ldb [21]
8268 (013) and #0x1f
8269 (014) jeq #0x12 jt 21 jf 15
8270 (015) ldb [21]
8271 (016) and #0x1f
8272 (017) jeq #0xf jt 21 jf 18
8273 (018) ldb [21]
8274 (019) and #0x1f
8275 (020) jeq #0x11 jt 21 jf 22
8276 (021) ret #262144
8277 (022) ret #0
8278 ',
8279 }, # isis_l1
8280 {
8281 name => 'isis_l2',
8282 DLT => 'EN10MB',
8283 aliases => [
8284 'l2',
8285 'isis proto 0x1b or 0x19 or 0x14 or 0x10 or 0x11',
8286 ],
8287 opt => '
8288 (000) ldh [12]
8289 (001) jgt #0x5dc jt 22 jf 2
8290 (002) ldh [14]
8291 (003) jeq #0xfefe jt 4 jf 22
8292 (004) ldb [17]
8293 (005) jeq #0x83 jt 6 jf 22
8294 (006) ldb [21]
8295 (007) and #0x1f
8296 (008) jeq #0x1b jt 21 jf 9
8297 (009) ldb [21]
8298 (010) and #0x1f
8299 (011) jeq #0x19 jt 21 jf 12
8300 (012) ldb [21]
8301 (013) and #0x1f
8302 (014) jeq #0x14 jt 21 jf 15
8303 (015) ldb [21]
8304 (016) and #0x1f
8305 (017) jeq #0x10 jt 21 jf 18
8306 (018) ldb [21]
8307 (019) and #0x1f
8308 (020) jeq #0x11 jt 21 jf 22
8309 (021) ret #262144
8310 (022) ret #0
8311 ',
8312 }, # isis_l2
8313 {
8314 name => 'isis_iih',
8315 DLT => 'EN10MB',
8316 aliases => [
8317 'iih',
8318 'isis proto 0x11 or 0x0f or 0x10',
8319 ],
8320 opt => '
8321 (000) ldh [12]
8322 (001) jgt #0x5dc jt 16 jf 2
8323 (002) ldh [14]
8324 (003) jeq #0xfefe jt 4 jf 16
8325 (004) ldb [17]
8326 (005) jeq #0x83 jt 6 jf 16
8327 (006) ldb [21]
8328 (007) and #0x1f
8329 (008) jeq #0x11 jt 15 jf 9
8330 (009) ldb [21]
8331 (010) and #0x1f
8332 (011) jeq #0xf jt 15 jf 12
8333 (012) ldb [21]
8334 (013) and #0x1f
8335 (014) jeq #0x10 jt 15 jf 16
8336 (015) ret #262144
8337 (016) ret #0
8338 ',
8339 }, # isis_iih
8340 {
8341 name => 'isis_lsp',
8342 DLT => 'EN10MB',
8343 aliases => [
8344 'lsp',
8345 'isis proto 0x12 or 0x14',
8346 ],
8347 opt => '
8348 (000) ldh [12]
8349 (001) jgt #0x5dc jt 13 jf 2
8350 (002) ldh [14]
8351 (003) jeq #0xfefe jt 4 jf 13
8352 (004) ldb [17]
8353 (005) jeq #0x83 jt 6 jf 13
8354 (006) ldb [21]
8355 (007) and #0x1f
8356 (008) jeq #0x12 jt 12 jf 9
8357 (009) ldb [21]
8358 (010) and #0x1f
8359 (011) jeq #0x14 jt 12 jf 13
8360 (012) ret #262144
8361 (013) ret #0
8362 ',
8363 }, # isis_lsp
8364 {
8365 name => 'isis_lsp_C_HDLC',
8366 DLT => 'C_HDLC',
8367 aliases => ['lsp'],
8368 opt => '
8369 (000) ldh [2]
8370 (001) jeq #0xfefe jt 2 jf 11
8371 (002) ldb [5]
8372 (003) jeq #0x83 jt 4 jf 11
8373 (004) ldb [9]
8374 (005) and #0x1f
8375 (006) jeq #0x12 jt 10 jf 7
8376 (007) ldb [9]
8377 (008) and #0x1f
8378 (009) jeq #0x14 jt 10 jf 11
8379 (010) ret #262144
8380 (011) ret #0
8381 ',
8382 }, # isis_lsp_C_HDLC
8383 {
8384 name => 'isis_snp',
8385 DLT => 'EN10MB',
8386 aliases => [
8387 'snp',
8388 'isis proto 0x1b or 0x1a or 0x18 or 0x19',
8389 ],
8390 opt => '
8391 (000) ldh [12]
8392 (001) jgt #0x5dc jt 19 jf 2
8393 (002) ldh [14]
8394 (003) jeq #0xfefe jt 4 jf 19
8395 (004) ldb [17]
8396 (005) jeq #0x83 jt 6 jf 19
8397 (006) ldb [21]
8398 (007) and #0x1f
8399 (008) jeq #0x1b jt 18 jf 9
8400 (009) ldb [21]
8401 (010) and #0x1f
8402 (011) jeq #0x1a jt 18 jf 12
8403 (012) ldb [21]
8404 (013) and #0x1f
8405 (014) jeq #0x18 jt 18 jf 15
8406 (015) ldb [21]
8407 (016) and #0x1f
8408 (017) jeq #0x19 jt 18 jf 19
8409 (018) ret #262144
8410 (019) ret #0
8411 ',
8412 }, # isis_snp
8413 {
8414 name => 'isis_csnp',
8415 DLT => 'EN10MB',
8416 aliases => [
8417 'csnp',
8418 'isis proto 0x18 or 0x19',
8419 ],
8420 opt => '
8421 (000) ldh [12]
8422 (001) jgt #0x5dc jt 13 jf 2
8423 (002) ldh [14]
8424 (003) jeq #0xfefe jt 4 jf 13
8425 (004) ldb [17]
8426 (005) jeq #0x83 jt 6 jf 13
8427 (006) ldb [21]
8428 (007) and #0x1f
8429 (008) jeq #0x18 jt 12 jf 9
8430 (009) ldb [21]
8431 (010) and #0x1f
8432 (011) jeq #0x19 jt 12 jf 13
8433 (012) ret #262144
8434 (013) ret #0
8435 ',
8436 }, # isis_csnp
8437 {
8438 name => 'isis_psnp',
8439 DLT => 'EN10MB',
8440 aliases => [
8441 'psnp',
8442 'isis proto 0x1a or 0x1b',
8443 ],
8444 opt => '
8445 (000) ldh [12]
8446 (001) jgt #0x5dc jt 13 jf 2
8447 (002) ldh [14]
8448 (003) jeq #0xfefe jt 4 jf 13
8449 (004) ldb [17]
8450 (005) jeq #0x83 jt 6 jf 13
8451 (006) ldb [21]
8452 (007) and #0x1f
8453 (008) jeq #0x1a jt 12 jf 9
8454 (009) ldb [21]
8455 (010) and #0x1f
8456 (011) jeq #0x1b jt 12 jf 13
8457 (012) ret #262144
8458 (013) ret #0
8459 ',
8460 }, # isis_psnp
8461
8462 {
8463 name => 'ip_multicast',
8464 snaplen => 1000,
8465 DLT => 'IPV4',
8466 aliases => ['ip multicast'],
8467 opt => '
8468 (000) ld #0x0
8469 (001) ldb [16]
8470 (002) jge #0xe0 jt 3 jf 4
8471 (003) ret #1000
8472 (004) ret #0
8473 ',
8474 }, # ip_multicast
8475 {
8476 name => 'ip_broadcast_30',
8477 DLT => 'IPV4',
8478 netmask => '255.255.255.252',
8479 aliases => ['ip broadcast'],
8480 unopt => '
8481 (000) ld #0x0
8482 (001) jeq #0x0 jt 2 jf 9
8483 (002) ld [16]
8484 (003) and #0x3
8485 (004) jeq #0x0 jt 8 jf 5
8486 (005) ld [16]
8487 (006) and #0x3
8488 (007) jeq #0x3 jt 8 jf 9
8489 (008) ret #262144
8490 (009) ret #0
8491 ',
8492 }, # ip_broadcast_30
8493 {
8494 name => 'ip_broadcast_24',
8495 DLT => 'IPV4',
8496 netmask => '255.255.255.0',
8497 aliases => ['ip broadcast'],
8498 opt => '
8499 (000) ld #0x0
8500 (001) ld [16]
8501 (002) jset #0xff jt 3 jf 6
8502 (003) and #0xff
8503 (004) jeq #0xff jt 6 jf 5
8504 (005) ret #0
8505 (006) ret #262144
8506 ',
8507 }, # ip_broadcast_24
8508 {
8509 name => 'ip_broadcast_0',
8510 # tcpdump does this by default (matches 0.0.0.0 and 255.255.255.255).
8511 DLT => 'RAW',
8512 netmask => '0.0.0.0',
8513 aliases => ['ip broadcast'],
8514 opt => '
8515 (000) ldb [0]
8516 (001) and #0xf0
8517 (002) jeq #0x40 jt 3 jf 7
8518 (003) ld [16]
8519 (004) jeq #0x0 jt 6 jf 5
8520 (005) jeq #0xffffffff jt 6 jf 7
8521 (006) ret #262144
8522 (007) ret #0
8523 ',
8524 }, # ip_broadcast_0
8525
8526 {
8527 name => 'ip_proto',
8528 DLT => 'EN10MB',
8529 # In this expression the protocol name is subject to external resolution
8530 # (typically via /etc/protocols), so pick something that is most likely
8531 # to resolve on all supported OSes.
8532 aliases => [
8533 'ip proto \tcp',
8534 'ip proto 6',
8535 ],
8536 opt => '
8537 (000) ldh [12]
8538 (001) jeq #0x800 jt 2 jf 5
8539 (002) ldb [23]
8540 (003) jeq #0x6 jt 4 jf 5
8541 (004) ret #262144
8542 (005) ret #0
8543 ',
8544 }, # ip6_proto
8545 {
8546 name => 'ip6_proto',
8547 DLT => 'EN10MB',
8548 aliases => [
8549 'ip6 proto \tcp', # Same as above.
8550 'ip6 proto 6',
8551 ],
8552 opt => '
8553 (000) ldh [12]
8554 (001) jeq #0x86dd jt 2 jf 8
8555 (002) ldb [20]
8556 (003) jeq #0x6 jt 7 jf 4
8557 (004) jeq #0x2c jt 5 jf 8
8558 (005) ldb [54]
8559 (006) jeq #0x6 jt 7 jf 8
8560 (007) ret #262144
8561 (008) ret #0
8562 ',
8563 }, # ip6_proto
8564 {
8565 name => 'proto',
8566 DLT => 'EN10MB',
8567 aliases => [
8568 'proto \tcp', # Same as above.
8569 'proto 6',
8570 ],
8571 opt => '
8572 (000) ldh [12]
8573 (001) jeq #0x800 jt 2 jf 4
8574 (002) ldb [23]
8575 (003) jeq #0x6 jt 10 jf 11
8576 (004) jeq #0x86dd jt 5 jf 11
8577 (005) ldb [20]
8578 (006) jeq #0x6 jt 10 jf 7
8579 (007) jeq #0x2c jt 8 jf 11
8580 (008) ldb [54]
8581 (009) jeq #0x6 jt 10 jf 11
8582 (010) ret #262144
8583 (011) ret #0
8584 ',
8585 }, # proto
8586 {
8587 name => 'ip_protochain',
8588 skip => skip_config_def1 ('NO_PROTOCHAIN'),
8589 DLT => 'RAW',
8590 aliases => [
8591 'ip protochain \udp',
8592 'ip protochain 17',
8593 ],
8594 unopt => '
8595 (000) ldb [0]
8596 (001) and #0xf0
8597 (002) jeq #0x40 jt 3 jf 23
8598 (003) ldb [9]
8599 (004) ldxb 4*([0]&0xf)
8600 (005) jeq #0x11 jt 20 jf 6
8601 (006) jeq #0x3b jt 20 jf 7
8602 (007) add #0
8603 (008) jeq #0x33 jt 9 jf 20
8604 (009) ldb [x + 0]
8605 (010) st M[0]
8606 (011) txa
8607 (012) add #1
8608 (013) tax
8609 (014) ldb [x + 0]
8610 (015) add #2
8611 (016) mul #4
8612 (017) tax
8613 (018) ld M[0]
8614 (019) ja 5
8615 (020) add #0
8616 (021) jeq #0x11 jt 22 jf 23
8617 (022) ret #262144
8618 (023) ret #0
8619 ',
8620 }, # ip_protochain
8621 {
8622 name => 'ip6_protochain',
8623 skip => skip_config_def1 ('NO_PROTOCHAIN'),
8624 DLT => 'RAW',
8625 aliases => [
8626 'ip6 protochain \udp',
8627 'ip6 protochain 17',
8628 ],
8629 unopt => '
8630 (000) ldb [0]
8631 (001) and #0xf0
8632 (002) jeq #0x60 jt 3 jf 35
8633 (003) ldb [6]
8634 (004) ldx #0x28
8635 (005) jeq #0x11 jt 32 jf 6
8636 (006) jeq #0x3b jt 32 jf 7
8637 (007) jeq #0x0 jt 11 jf 8
8638 (008) jeq #0x3c jt 11 jf 9
8639 (009) jeq #0x2b jt 11 jf 10
8640 (010) jeq #0x2c jt 11 jf 20
8641 (011) ldb [x + 0]
8642 (012) st M[0]
8643 (013) ldb [x + 1]
8644 (014) add #1
8645 (015) mul #8
8646 (016) add x
8647 (017) tax
8648 (018) ld M[0]
8649 (019) ja 5
8650 (020) jeq #0x33 jt 21 jf 32
8651 (021) ldb [x + 0]
8652 (022) st M[0]
8653 (023) txa
8654 (024) add #1
8655 (025) tax
8656 (026) ldb [x + 0]
8657 (027) add #2
8658 (028) mul #4
8659 (029) tax
8660 (030) ld M[0]
8661 (031) ja 5
8662 (032) add #0
8663 (033) jeq #0x11 jt 34 jf 35
8664 (034) ret #262144
8665 (035) ret #0
8666 ',
8667 }, # ip6_protochain
8668 {
8669 name => 'protochain',
8670 skip => skip_config_def1 ('NO_PROTOCHAIN'),
8671 DLT => 'RAW',
8672 aliases => [
8673 'protochain \udp',
8674 'protochain 17',
8675 ],
8676 unopt => '
8677 (000) ldb [0]
8678 (001) and #0xf0
8679 (002) jeq #0x40 jt 3 jf 22
8680 (003) ldb [9]
8681 (004) ldxb 4*([0]&0xf)
8682 (005) jeq #0x11 jt 20 jf 6
8683 (006) jeq #0x3b jt 20 jf 7
8684 (007) add #0
8685 (008) jeq #0x33 jt 9 jf 20
8686 (009) ldb [x + 0]
8687 (010) st M[1]
8688 (011) txa
8689 (012) add #1
8690 (013) tax
8691 (014) ldb [x + 0]
8692 (015) add #2
8693 (016) mul #4
8694 (017) tax
8695 (018) ld M[1]
8696 (019) ja 5
8697 (020) add #0
8698 (021) jeq #0x11 jt 56 jf 22
8699 (022) ldb [0]
8700 (023) and #0xf0
8701 (024) jeq #0x60 jt 25 jf 57
8702 (025) ldb [6]
8703 (026) ldx #0x28
8704 (027) jeq #0x11 jt 54 jf 28
8705 (028) jeq #0x3b jt 54 jf 29
8706 (029) jeq #0x0 jt 33 jf 30
8707 (030) jeq #0x3c jt 33 jf 31
8708 (031) jeq #0x2b jt 33 jf 32
8709 (032) jeq #0x2c jt 33 jf 42
8710 (033) ldb [x + 0]
8711 (034) st M[1]
8712 (035) ldb [x + 1]
8713 (036) add #1
8714 (037) mul #8
8715 (038) add x
8716 (039) tax
8717 (040) ld M[1]
8718 (041) ja 27
8719 (042) jeq #0x33 jt 43 jf 54
8720 (043) ldb [x + 0]
8721 (044) st M[1]
8722 (045) txa
8723 (046) add #1
8724 (047) tax
8725 (048) ldb [x + 0]
8726 (049) add #2
8727 (050) mul #4
8728 (051) tax
8729 (052) ld M[1]
8730 (053) ja 27
8731 (054) add #0
8732 (055) jeq #0x11 jt 56 jf 57
8733 (056) ret #262144
8734 (057) ret #0
8735 ',
8736 }, # protochain
8737 {
8738 name => 'ip_host_addr',
8739 # For this and some other single-stack qualifiers below use DLT_RAW to
8740 # verify that the bytecode does not try to match the other protocol too.
8741 DLT => 'RAW',
8742 snaplen => 2000,
8743 aliases => [
8744 'ip host 192.168.170.211',
8745 'ip src or dst 192.168.170.211',
8746 'ip src or dst host 192.168.170.211',
8747 'host 192.168.170.211',
8748 'src or dst 192.168.170.211',
8749 'src or dst host 192.168.170.211',
8750 'ip host 0xc0a8aad3',
8751 'ip src or dst 0xc0a8aad3',
8752 'ip src or dst host 0xc0a8aad3',
8753 'host 0xc0a8aad3',
8754 'src or dst 0xc0a8aad3',
8755 'src or dst host 0xc0a8aad3',
8756 'ip host 3232279251',
8757 'ip src or dst 3232279251',
8758 'ip src or dst host 3232279251',
8759 'host 3232279251',
8760 'src or dst 3232279251',
8761 'src or dst host 3232279251',
8762 # No aliases for 030052125323, which matches a MAC address.
8763 # "net" without an explicit netmask defaults to /32.
8764 'ip net 192.168.170.211/32',
8765 'ip src or dst net 192.168.170.211/ 32',
8766 'net 192.168.170.211 /32',
8767 'src or dst net 192.168.170.211 / 32',
8768 'ip net 192.168.170.211',
8769 'ip src or dst net 192.168.170.211',
8770 'net 192.168.170.211',
8771 'src or dst net 192.168.170.211',
8772 'ip net 0xc0a8aad3',
8773 'ip src or dst net 0xc0a8aad3',
8774 'net 0xc0a8aad3',
8775 'src or dst net 0xc0a8aad3',
8776 'ip net 3232279251',
8777 'ip src or dst net 3232279251',
8778 'net 3232279251',
8779 'src or dst net 3232279251',
8780 ],
8781 opt => '
8782 (000) ldb [0]
8783 (001) and #0xf0
8784 (002) jeq #0x40 jt 3 jf 8
8785 (003) ld [12]
8786 (004) jeq #0xc0a8aad3 jt 7 jf 5
8787 (005) ld [16]
8788 (006) jeq #0xc0a8aad3 jt 7 jf 8
8789 (007) ret #2000
8790 (008) ret #0
8791 ',
8792 }, # ip_host_addr
8793 # The DLT supports both IPv4 and IPv6, the expressions use:
8794 # * IPv4-only syntax and an IPv4-only hostname
8795 # * IPv4-only syntax and an IPv4+IPv6 hostname
8796 # * IPv4+IPv6 syntax and an IPv4-only hostname
8797 # In each case the filter program should be the same and IPv4-only. Other
8798 # similar tests use a similar approach.
8799 {
8800 name => 'ip_host_name',
8801 skip => skip_no_hosts(),
8802 DLT => 'RAW',
8803 snaplen => 2000,
8804 aliases => [
8805 'ip host noeth-ipv4-noipv6.host123.libpcap.test',
8806 'ip host noeth-ipv4-ipv6.host123.libpcap.test',
8807 'ip src or dst noeth-ipv4-noipv6.host123.libpcap.test',
8808 'ip src or dst noeth-ipv4-ipv6.host123.libpcap.test',
8809 'ip src or dst host noeth-ipv4-noipv6.host123.libpcap.test',
8810 'ip src or dst host noeth-ipv4-ipv6.host123.libpcap.test',
8811 'host noeth-ipv4-noipv6.host123.libpcap.test',
8812 'src or dst noeth-ipv4-noipv6.host123.libpcap.test',
8813 'src or dst host noeth-ipv4-noipv6.host123.libpcap.test',
8814 ],
8815 opt => '
8816 (000) ldb [0]
8817 (001) and #0xf0
8818 (002) jeq #0x40 jt 3 jf 8
8819 (003) ld [12]
8820 (004) jeq #0xa141e28 jt 7 jf 5
8821 (005) ld [16]
8822 (006) jeq #0xa141e28 jt 7 jf 8
8823 (007) ret #2000
8824 (008) ret #0
8825 ',
8826 }, # ip_host_name
8827 {
8828 name => 'ip_host_NAME',
8829 skip => skip_no_hosts_casecmp(),
8830 DLT => 'RAW',
8831 snaplen => 2000,
8832 aliases => [
8833 'ip host NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
8834 'ip host NOETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
8835 'ip src or dst NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
8836 'ip src or dst NOETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
8837 'ip src or dst host NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
8838 'ip src or dst host NOETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
8839 'host NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
8840 'src or dst NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
8841 'src or dst host NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
8842 ],
8843 opt => '
8844 (000) ldb [0]
8845 (001) and #0xf0
8846 (002) jeq #0x40 jt 3 jf 8
8847 (003) ld [12]
8848 (004) jeq #0xa141e28 jt 7 jf 5
8849 (005) ld [16]
8850 (006) jeq #0xa141e28 jt 7 jf 8
8851 (007) ret #2000
8852 (008) ret #0
8853 ',
8854 }, # ip_host_NAME
8855 {
8856 name => 'ip_src_host_addr',
8857 DLT => 'RAW',
8858 snaplen => 2000,
8859 aliases => [
8860 'ip src host 10.0.0.2',
8861 'ip src 10.0.0.2',
8862 'src host 10.0.0.2',
8863 'src 10.0.0.2',
8864 'ip src host 0x0a000002',
8865 'ip src 0x0A000002',
8866 'src host 0X0a000002',
8867 'src 0X0A000002',
8868 'ip src host 0xa000002',
8869 'ip src 0xA000002',
8870 'src host 0Xa000002',
8871 'src 0XA000002',
8872 'ip src host 167772162',
8873 'ip src 167772162',
8874 'src host 167772162',
8875 'src 167772162',
8876 'ip src host 01200000002',
8877 'ip src 01200000002',
8878 'src host 01200000002',
8879 'src 01200000002',
8880 # "net" /32
8881 'ip src net 10.0.0.2/ 32',
8882 'src net 10.0.0.2 /32',
8883 'ip src net 10.0.0.2',
8884 'src net 10.0.0.2',
8885 'ip src net 0x0a000002',
8886 'src net 0X0a000002',
8887 'ip src net 0xa000002',
8888 'src net 0Xa000002',
8889 'ip src net 167772162',
8890 'src net 167772162',
8891 'ip src net 01200000002',
8892 'src net 01200000002',
8893 ],
8894 opt => '
8895 (000) ldb [0]
8896 (001) and #0xf0
8897 (002) jeq #0x40 jt 3 jf 6
8898 (003) ld [12]
8899 (004) jeq #0xa000002 jt 5 jf 6
8900 (005) ret #2000
8901 (006) ret #0
8902 ',
8903 }, # ip_src_host_addr
8904 {
8905 name => 'ip_src_host_name',
8906 skip => skip_no_hosts(),
8907 DLT => 'RAW',
8908 snaplen => 2000,
8909 aliases => [
8910 'ip src host noeth-ipv4-noipv6.host123.libpcap.test',
8911 'ip src host noeth-ipv4-ipv6.host123.libpcap.test',
8912 'ip src noeth-ipv4-noipv6.host123.libpcap.test',
8913 'ip src noeth-ipv4-ipv6.host123.libpcap.test',
8914 'src host noeth-ipv4-noipv6.host123.libpcap.test',
8915 'src noeth-ipv4-noipv6.host123.libpcap.test',
8916 ],
8917 unopt => '
8918 (000) ldb [0]
8919 (001) and #0xf0
8920 (002) jeq #0x40 jt 3 jf 6
8921 (003) ld [12]
8922 (004) jeq #0xa141e28 jt 5 jf 6
8923 (005) ret #2000
8924 (006) ret #0
8925 ',
8926 }, # ip_src_host_name
8927 {
8928 name => 'ip_src_host_NAME',
8929 skip => skip_no_hosts_casecmp(),
8930 DLT => 'RAW',
8931 snaplen => 2000,
8932 aliases => [
8933 'ip src host NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
8934 'ip src host NOETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
8935 'ip src NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
8936 'ip src NOETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
8937 'src host NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
8938 'src NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
8939 ],
8940 unopt => '
8941 (000) ldb [0]
8942 (001) and #0xf0
8943 (002) jeq #0x40 jt 3 jf 6
8944 (003) ld [12]
8945 (004) jeq #0xa141e28 jt 5 jf 6
8946 (005) ret #2000
8947 (006) ret #0
8948 ',
8949 }, # ip_src_host_NAME
8950 {
8951 name => 'ip_dst_host_addr',
8952 DLT => 'RAW',
8953 snaplen => 2000,
8954 aliases => [
8955 'ip dst host 172.17.89.30',
8956 'ip dst 172.17.89.30',
8957 'dst host 172.17.89.30',
8958 'dst 172.17.89.30',
8959 'ip dst host 0xac11591e',
8960 'ip dst 0xAC11591E',
8961 'dst host 0Xac11591e',
8962 'dst 0XAC11591E',
8963 'ip dst host 2886818078',
8964 'ip dst 2886818078',
8965 'dst host 2886818078',
8966 'dst 2886818078',
8967 # No aliases for 025404254436, which matches a MAC address.
8968 # "net" /32
8969 'ip dst net 172.17.89.30 / 32',
8970 'dst net 172.17.89.30 / 32',
8971 'ip dst net 172.17.89.30',
8972 'dst net 172.17.89.30',
8973 'ip dst net 0xac11591e',
8974 'dst net 0Xac11591e',
8975 'ip dst net 2886818078',
8976 'dst net 2886818078',
8977 ],
8978 opt => '
8979 (000) ldb [0]
8980 (001) and #0xf0
8981 (002) jeq #0x40 jt 3 jf 6
8982 (003) ld [16]
8983 (004) jeq #0xac11591e jt 5 jf 6
8984 (005) ret #2000
8985 (006) ret #0
8986 ',
8987 }, # ip_dst_host_addr
8988 {
8989 name => 'ip_dst_host_name',
8990 skip => skip_no_hosts(),
8991 DLT => 'RAW',
8992 snaplen => 2000,
8993 aliases => [
8994 'ip dst host noeth-ipv4-noipv6.host123.libpcap.test',
8995 'ip dst host noeth-ipv4-ipv6.host123.libpcap.test',
8996 'ip dst noeth-ipv4-noipv6.host123.libpcap.test',
8997 'ip dst noeth-ipv4-ipv6.host123.libpcap.test',
8998 'dst host noeth-ipv4-noipv6.host123.libpcap.test',
8999 'dst noeth-ipv4-noipv6.host123.libpcap.test',
9000 ],
9001 unopt => '
9002 (000) ldb [0]
9003 (001) and #0xf0
9004 (002) jeq #0x40 jt 3 jf 6
9005 (003) ld [16]
9006 (004) jeq #0xa141e28 jt 5 jf 6
9007 (005) ret #2000
9008 (006) ret #0
9009 ',
9010 }, # ip_dst_host_name
9011 {
9012 name => 'ip_dst_host_NAME',
9013 skip => skip_no_hosts_casecmp(),
9014 DLT => 'RAW',
9015 snaplen => 2000,
9016 aliases => [
9017 'ip dst host NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
9018 'ip dst host NOETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
9019 'ip dst NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
9020 'ip dst NOETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
9021 'dst host NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
9022 'dst NOETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
9023 ],
9024 unopt => '
9025 (000) ldb [0]
9026 (001) and #0xf0
9027 (002) jeq #0x40 jt 3 jf 6
9028 (003) ld [16]
9029 (004) jeq #0xa141e28 jt 5 jf 6
9030 (005) ret #2000
9031 (006) ret #0
9032 ',
9033 }, # ip_dst_host_NAME
9034 {
9035 name => 'ip_net_addr',
9036 DLT => 'RAW',
9037 snaplen => 2000,
9038 aliases => [
9039 'ip net 192.168.0.0/16',
9040 'ip src or dst net 192.168.0.0/16',
9041 'net 192.168.0.0/16',
9042 'src or dst net 192.168.0.0/16',
9043 'ip net 192.168/16',
9044 'ip src or dst net 192.168/16',
9045 'net 192.168/16',
9046 'src or dst net 192.168/16',
9047 'ip net 192.168.0.0 mask 255.255.0.0',
9048 'ip src or dst net 192.168.0.0 mask 255.255.0.0',
9049 'net 192.168.0.0 mask 255.255.0.0',
9050 'src or dst net 192.168.0.0 mask 255.255.0.0',
9051 'ip net 192.168.0.0 mask 255.255',
9052 'ip src or dst net 192.168.0.0 mask 255.255',
9053 'net 192.168.0.0 mask 255.255',
9054 'src or dst net 192.168.0.0 mask 255.255',
9055 'ip net 192.168 mask 255.255.0.0',
9056 'ip src or dst net 192.168 mask 255.255.0.0',
9057 'net 192.168 mask 255.255.0.0',
9058 'src or dst net 192.168 mask 255.255.0.0',
9059 'ip net 192.168 mask 255.255',
9060 'ip src or dst net 192.168 mask 255.255',
9061 'net 192.168 mask 255.255',
9062 'src or dst net 192.168 mask 255.255',
9063 'ip net 192.168',
9064 'ip src or dst net 192.168',
9065 'net 192.168',
9066 'src or dst net 192.168',
9067 ],
9068 # Only the optimized bytecode is equivalent!
9069 # (This is because "net 192.168/16" means "ip net 192.168/16 or
9070 # arp net 192.168/16 or rarp net 192.168/16" and on DLT_RAW each
9071 # of latter two parts generates an explicit false condition,
9072 # which eventually optimizes out.)
9073 opt => '
9074 (000) ldb [0]
9075 (001) and #0xf0
9076 (002) jeq #0x40 jt 3 jf 10
9077 (003) ld [12]
9078 (004) and #0xffff0000
9079 (005) jeq #0xc0a80000 jt 9 jf 6
9080 (006) ld [16]
9081 (007) and #0xffff0000
9082 (008) jeq #0xc0a80000 jt 9 jf 10
9083 (009) ret #2000
9084 (010) ret #0
9085 ',
9086 }, # ip_net_addr
9087 {
9088 name => 'ip_net_name',
9089 skip => skip_no_networks(),
9090 DLT => 'RAW',
9091 aliases => [
9092 'ip net net-10-0-0-0.libpcap.test',
9093 'ip src or dst net net-10-0-0-0.libpcap.test',
9094 ],
9095 opt => '
9096 (000) ldb [0]
9097 (001) and #0xf0
9098 (002) jeq #0x40 jt 3 jf 8
9099 (003) ld [12]
9100 (004) jeq #0xa000000 jt 7 jf 5
9101 (005) ld [16]
9102 (006) jeq #0xa000000 jt 7 jf 8
9103 (007) ret #262144
9104 (008) ret #0
9105 ',
9106 }, # ip_net_name
9107 {
9108 name => 'ip_net_NAME',
9109 skip => skip_no_networks_casecmp(),
9110 DLT => 'RAW',
9111 aliases => [
9112 'ip net NET-10-0-0-0.LIBPCAP.TEST',
9113 'ip src or dst net NET-10-0-0-0.LIBPCAP.TEST',
9114 ],
9115 opt => '
9116 (000) ldb [0]
9117 (001) and #0xf0
9118 (002) jeq #0x40 jt 3 jf 8
9119 (003) ld [12]
9120 (004) jeq #0xa000000 jt 7 jf 5
9121 (005) ld [16]
9122 (006) jeq #0xa000000 jt 7 jf 8
9123 (007) ret #262144
9124 (008) ret #0
9125 ',
9126 }, # ip_net_NAME
9127 {
9128 name => 'ip_src_net_addr',
9129 DLT => 'RAW',
9130 snaplen => 2000,
9131 aliases => [
9132 'ip src net 10.0.1.0/24',
9133 'src net 10.0.1.0/24',
9134 'ip src net 10.0.1/24',
9135 'src net 10.0.1/24',
9136 'ip src net 10.0.1.0 mask 255.255.255.0',
9137 'src net 10.0.1.0 mask 255.255.255.0',
9138 'ip src net 10.0.1.0 mask 255.255.255',
9139 'src net 10.0.1.0 mask 255.255.255',
9140 'ip src net 10.0.1 mask 255.255.255.0',
9141 'src net 10.0.1 mask 255.255.255.0',
9142 'ip src net 10.0.1 mask 255.255.255',
9143 'src net 10.0.1 mask 255.255.255',
9144 'ip src net 10.0.1',
9145 'src net 10.0.1',
9146 ],
9147 # Only the optimized bytecode is equivalent!
9148 opt => '
9149 (000) ldb [0]
9150 (001) and #0xf0
9151 (002) jeq #0x40 jt 3 jf 7
9152 (003) ld [12]
9153 (004) and #0xffffff00
9154 (005) jeq #0xa000100 jt 6 jf 7
9155 (006) ret #2000
9156 (007) ret #0
9157 ',
9158 }, # ip_src_net_addr
9159 {
9160 name => 'ip_src_net_name',
9161 skip => skip_no_networks(),
9162 DLT => 'RAW',
9163 aliases => [
9164 'ip src net net-10-20-0-0.libpcap.test',
9165 'src net net-10-20-0-0.libpcap.test',
9166 ],
9167 opt => '
9168 (000) ldb [0]
9169 (001) and #0xf0
9170 (002) jeq #0x40 jt 3 jf 6
9171 (003) ld [12]
9172 (004) jeq #0xa140000 jt 5 jf 6
9173 (005) ret #262144
9174 (006) ret #0
9175 ',
9176 }, # ip_src_net_name
9177 {
9178 name => 'ip_src_net_NAME',
9179 skip => skip_no_networks_casecmp(),
9180 DLT => 'RAW',
9181 aliases => [
9182 'ip src net NET-10-20-0-0.LIBPCAP.TEST',
9183 'src net NET-10-20-0-0.LIBPCAP.TEST',
9184 ],
9185 opt => '
9186 (000) ldb [0]
9187 (001) and #0xf0
9188 (002) jeq #0x40 jt 3 jf 6
9189 (003) ld [12]
9190 (004) jeq #0xa140000 jt 5 jf 6
9191 (005) ret #262144
9192 (006) ret #0
9193 ',
9194 }, # ip_src_net_NAME
9195 {
9196 name => 'ip_dst_net_addr_0',
9197 DLT => 'RAW',
9198 snaplen => 2000,
9199 aliases => ['ip dst net 0.0.0.0/0'],
9200 unopt => '
9201 (000) ldb [0]
9202 (001) and #0xf0
9203 (002) jeq #0x40 jt 3 jf 4
9204 (003) ret #2000
9205 (004) ret #0
9206 ',
9207 }, # ip_dst_net_addr_0
9208 {
9209 name => 'ip_dst_net_addr_8',
9210 DLT => 'RAW',
9211 snaplen => 2000,
9212 aliases => [
9213 'ip dst net 10.0.0.0/8',
9214 'dst net 10.0.0.0/8',
9215 'ip dst net 10.0.0.0 mask 255.0.0.0',
9216 'dst net 10.0.0.0 mask 255.0.0.0',
9217 # "net 10/<any masklength>", "net 10 mask <any mask>" and
9218 # "net <any net> mask 255" are invalid syntax.
9219 'ip dst net 10',
9220 'dst net 10',
9221 ],
9222 # Only the optimized bytecode is equivalent!
9223 opt => '
9224 (000) ldb [0]
9225 (001) and #0xf0
9226 (002) jeq #0x40 jt 3 jf 7
9227 (003) ld [16]
9228 (004) and #0xff000000
9229 (005) jeq #0xa000000 jt 6 jf 7
9230 (006) ret #2000
9231 (007) ret #0
9232 ',
9233 }, # ip_dst_net_addr_8
9234 {
9235 name => 'ip_dst_net_name',
9236 skip => skip_no_networks(),
9237 DLT => 'RAW',
9238 aliases => [
9239 'ip dst net net-10-20-30-0.libpcap.test',
9240 'dst net net-10-20-30-0.libpcap.test',
9241 ],
9242 opt => '
9243 (000) ldb [0]
9244 (001) and #0xf0
9245 (002) jeq #0x40 jt 3 jf 6
9246 (003) ld [16]
9247 (004) jeq #0xa141e00 jt 5 jf 6
9248 (005) ret #262144
9249 (006) ret #0
9250 ',
9251 }, # ip_dst_net_name
9252 {
9253 name => 'ip_dst_net_NAME',
9254 skip => skip_no_networks_casecmp(),
9255 DLT => 'RAW',
9256 aliases => [
9257 'ip dst net NET-10-20-30-0.LIBPCAP.TEST',
9258 'dst net NET-10-20-30-0.LIBPCAP.TEST',
9259 ],
9260 opt => '
9261 (000) ldb [0]
9262 (001) and #0xf0
9263 (002) jeq #0x40 jt 3 jf 6
9264 (003) ld [16]
9265 (004) jeq #0xa141e00 jt 5 jf 6
9266 (005) ret #262144
9267 (006) ret #0
9268 ',
9269 }, # ip_dst_net_NAME
9270 # TODO: Verify identity with DLT_NETANALYZER and
9271 # DLT_NETANALYZER_TRANSPARENT in all DLT_EN10MB gateway tests.
9272 {
9273 name => 'gateway_name_en10mb',
9274 skip => skip_config_def1 ('INET6') ||
9275 skip_no_ethers() ||
9276 skip_no_hosts(),
9277 DLT => 'EN10MB',
9278 aliases => [
9279 'gateway eth-ipv4-noipv6.host123.libpcap.test',
9280 # In the current implementation of this keyword the presence of an IPv6
9281 # address in the Internet address space should make no difference in
9282 # the resulting filter program.
9283 'gateway eth-ipv4-ipv6.host123.libpcap.test',
9284 ],
9285 opt => '
9286 (000) ld [8]
9287 (001) jeq #0x400140e jt 2 jf 4
9288 (002) ldh [6]
9289 (003) jeq #0xaa00 jt 8 jf 4
9290 (004) ld [2]
9291 (005) jeq #0x400140e jt 6 jf 21
9292 (006) ldh [0]
9293 (007) jeq #0xaa00 jt 8 jf 21
9294 (008) ldh [12]
9295 (009) jeq #0x800 jt 10 jf 14
9296 (010) ld [26]
9297 (011) jeq #0xa141e28 jt 21 jf 12
9298 (012) ld [30]
9299 (013) jeq #0xa141e28 jt 21 jf 20
9300 (014) jeq #0x806 jt 16 jf 15
9301 (015) jeq #0x8035 jt 16 jf 20
9302 (016) ld [28]
9303 (017) jeq #0xa141e28 jt 21 jf 18
9304 (018) ld [38]
9305 (019) jeq #0xa141e28 jt 21 jf 20
9306 (020) ret #262144
9307 (021) ret #0
9308 ',
9309 }, # gateway_name_en10mb
9310 {
9311 name => 'gateway_NAME_en10mb',
9312 skip => skip_config_def1 ('INET6') ||
9313 skip_no_ethers_casecmp() ||
9314 skip_no_hosts_casecmp(),
9315 DLT => 'EN10MB',
9316 aliases => [
9317 'gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
9318 'gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
9319 ],
9320 opt => '
9321 (000) ld [8]
9322 (001) jeq #0x400140e jt 2 jf 4
9323 (002) ldh [6]
9324 (003) jeq #0xaa00 jt 8 jf 4
9325 (004) ld [2]
9326 (005) jeq #0x400140e jt 6 jf 21
9327 (006) ldh [0]
9328 (007) jeq #0xaa00 jt 8 jf 21
9329 (008) ldh [12]
9330 (009) jeq #0x800 jt 10 jf 14
9331 (010) ld [26]
9332 (011) jeq #0xa141e28 jt 21 jf 12
9333 (012) ld [30]
9334 (013) jeq #0xa141e28 jt 21 jf 20
9335 (014) jeq #0x806 jt 16 jf 15
9336 (015) jeq #0x8035 jt 16 jf 20
9337 (016) ld [28]
9338 (017) jeq #0xa141e28 jt 21 jf 18
9339 (018) ld [38]
9340 (019) jeq #0xa141e28 jt 21 jf 20
9341 (020) ret #262144
9342 (021) ret #0
9343 ',
9344 }, # gateway_NAME_en10mb
9345 {
9346 name => 'ip_gateway_name_en10mb',
9347 skip => skip_config_def1 ('INET6') ||
9348 skip_no_ethers() ||
9349 skip_no_hosts(),
9350 DLT => 'EN10MB',
9351 aliases => [
9352 'ip gateway eth-ipv4-noipv6.host123.libpcap.test',
9353 'ip gateway eth-ipv4-ipv6.host123.libpcap.test',
9354 ],
9355 unopt => '
9356 (000) ld [8]
9357 (001) jeq #0x400140e jt 2 jf 4
9358 (002) ldh [6]
9359 (003) jeq #0xaa00 jt 8 jf 4
9360 (004) ld [2]
9361 (005) jeq #0x400140e jt 6 jf 15
9362 (006) ldh [0]
9363 (007) jeq #0xaa00 jt 8 jf 15
9364 (008) ldh [12]
9365 (009) jeq #0x800 jt 10 jf 14
9366 (010) ld [26]
9367 (011) jeq #0xa141e28 jt 15 jf 12
9368 (012) ld [30]
9369 (013) jeq #0xa141e28 jt 15 jf 14
9370 (014) ret #262144
9371 (015) ret #0
9372 ',
9373 }, # ip_gateway_name_en10mb
9374 {
9375 name => 'ip_gateway_NAME_en10mb',
9376 skip => skip_config_def1 ('INET6') ||
9377 skip_no_ethers_casecmp() ||
9378 skip_no_hosts_casecmp(),
9379 DLT => 'EN10MB',
9380 aliases => [
9381 'ip gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
9382 'ip gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
9383 ],
9384 unopt => '
9385 (000) ld [8]
9386 (001) jeq #0x400140e jt 2 jf 4
9387 (002) ldh [6]
9388 (003) jeq #0xaa00 jt 8 jf 4
9389 (004) ld [2]
9390 (005) jeq #0x400140e jt 6 jf 15
9391 (006) ldh [0]
9392 (007) jeq #0xaa00 jt 8 jf 15
9393 (008) ldh [12]
9394 (009) jeq #0x800 jt 10 jf 14
9395 (010) ld [26]
9396 (011) jeq #0xa141e28 jt 15 jf 12
9397 (012) ld [30]
9398 (013) jeq #0xa141e28 jt 15 jf 14
9399 (014) ret #262144
9400 (015) ret #0
9401 ',
9402 }, # ip_gateway_NAME_en10mb
9403 {
9404 name => 'arp_gateway_name_en10mb',
9405 skip => skip_config_def1 ('INET6') ||
9406 skip_no_ethers() ||
9407 skip_no_hosts(),
9408 DLT => 'EN10MB',
9409 aliases => [
9410 'arp gateway eth-ipv4-noipv6.host123.libpcap.test',
9411 'arp gateway eth-ipv4-ipv6.host123.libpcap.test',
9412 ],
9413 unopt => '
9414 (000) ld [8]
9415 (001) jeq #0x400140e jt 2 jf 4
9416 (002) ldh [6]
9417 (003) jeq #0xaa00 jt 8 jf 4
9418 (004) ld [2]
9419 (005) jeq #0x400140e jt 6 jf 15
9420 (006) ldh [0]
9421 (007) jeq #0xaa00 jt 8 jf 15
9422 (008) ldh [12]
9423 (009) jeq #0x806 jt 10 jf 14
9424 (010) ld [28]
9425 (011) jeq #0xa141e28 jt 15 jf 12
9426 (012) ld [38]
9427 (013) jeq #0xa141e28 jt 15 jf 14
9428 (014) ret #262144
9429 (015) ret #0
9430 ',
9431 }, # arp_gateway_name_en10mb
9432 {
9433 name => 'arp_gateway_NAME_en10mb',
9434 skip => skip_config_def1 ('INET6') ||
9435 skip_no_ethers_casecmp() ||
9436 skip_no_hosts_casecmp(),
9437 DLT => 'EN10MB',
9438 aliases => [
9439 'arp gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
9440 'arp gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
9441 ],
9442 unopt => '
9443 (000) ld [8]
9444 (001) jeq #0x400140e jt 2 jf 4
9445 (002) ldh [6]
9446 (003) jeq #0xaa00 jt 8 jf 4
9447 (004) ld [2]
9448 (005) jeq #0x400140e jt 6 jf 15
9449 (006) ldh [0]
9450 (007) jeq #0xaa00 jt 8 jf 15
9451 (008) ldh [12]
9452 (009) jeq #0x806 jt 10 jf 14
9453 (010) ld [28]
9454 (011) jeq #0xa141e28 jt 15 jf 12
9455 (012) ld [38]
9456 (013) jeq #0xa141e28 jt 15 jf 14
9457 (014) ret #262144
9458 (015) ret #0
9459 ',
9460 }, # arp_gateway_NAME_en10mb
9461 {
9462 name => 'rarp_gateway_name_en10mb',
9463 skip => skip_config_def1 ('INET6') ||
9464 skip_no_ethers() ||
9465 skip_no_hosts(),
9466 DLT => 'EN10MB',
9467 aliases => [
9468 'rarp gateway eth-ipv4-noipv6.host123.libpcap.test',
9469 'rarp gateway eth-ipv4-ipv6.host123.libpcap.test',
9470 ],
9471 unopt => '
9472 (000) ld [8]
9473 (001) jeq #0x400140e jt 2 jf 4
9474 (002) ldh [6]
9475 (003) jeq #0xaa00 jt 8 jf 4
9476 (004) ld [2]
9477 (005) jeq #0x400140e jt 6 jf 15
9478 (006) ldh [0]
9479 (007) jeq #0xaa00 jt 8 jf 15
9480 (008) ldh [12]
9481 (009) jeq #0x8035 jt 10 jf 14
9482 (010) ld [28]
9483 (011) jeq #0xa141e28 jt 15 jf 12
9484 (012) ld [38]
9485 (013) jeq #0xa141e28 jt 15 jf 14
9486 (014) ret #262144
9487 (015) ret #0
9488 ',
9489 }, # rarp_gateway_name_en10mb
9490 {
9491 name => 'rarp_gateway_NAME_en10mb',
9492 skip => skip_config_def1 ('INET6') ||
9493 skip_no_ethers_casecmp() ||
9494 skip_no_hosts_casecmp(),
9495 DLT => 'EN10MB',
9496 aliases => [
9497 'rarp gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
9498 'rarp gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
9499 ],
9500 unopt => '
9501 (000) ld [8]
9502 (001) jeq #0x400140e jt 2 jf 4
9503 (002) ldh [6]
9504 (003) jeq #0xaa00 jt 8 jf 4
9505 (004) ld [2]
9506 (005) jeq #0x400140e jt 6 jf 15
9507 (006) ldh [0]
9508 (007) jeq #0xaa00 jt 8 jf 15
9509 (008) ldh [12]
9510 (009) jeq #0x8035 jt 10 jf 14
9511 (010) ld [28]
9512 (011) jeq #0xa141e28 jt 15 jf 12
9513 (012) ld [38]
9514 (013) jeq #0xa141e28 jt 15 jf 14
9515 (014) ret #262144
9516 (015) ret #0
9517 ',
9518 }, # rarp_gateway_NAME_en10mb
9519 {
9520 name => 'gateway_name_fddi',
9521 skip => skip_config_def1 ('INET6') ||
9522 skip_no_ethers() ||
9523 skip_no_hosts(),
9524 DLT => 'FDDI',
9525 aliases => [
9526 'gateway eth-ipv4-noipv6.host123.libpcap.test',
9527 'gateway eth-ipv4-ipv6.host123.libpcap.test',
9528 ],
9529 opt => '
9530 (000) ld [9]
9531 (001) jeq #0x400140e jt 2 jf 4
9532 (002) ldh [7]
9533 (003) jeq #0xaa00 jt 8 jf 4
9534 (004) ld [3]
9535 (005) jeq #0x400140e jt 6 jf 21
9536 (006) ldh [1]
9537 (007) jeq #0xaa00 jt 8 jf 21
9538 (008) ldh [19]
9539 (009) jeq #0x800 jt 10 jf 14
9540 (010) ld [33]
9541 (011) jeq #0xa141e28 jt 21 jf 12
9542 (012) ld [37]
9543 (013) jeq #0xa141e28 jt 21 jf 20
9544 (014) jeq #0x806 jt 16 jf 15
9545 (015) jeq #0x8035 jt 16 jf 20
9546 (016) ld [35]
9547 (017) jeq #0xa141e28 jt 21 jf 18
9548 (018) ld [45]
9549 (019) jeq #0xa141e28 jt 21 jf 20
9550 (020) ret #262144
9551 (021) ret #0
9552 ',
9553 }, # gateway_name_fddi
9554 {
9555 name => 'gateway_NAME_fddi',
9556 skip => skip_config_def1 ('INET6') ||
9557 skip_no_ethers_casecmp() ||
9558 skip_no_hosts_casecmp(),
9559 DLT => 'FDDI',
9560 aliases => [
9561 'gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
9562 'gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
9563 ],
9564 opt => '
9565 (000) ld [9]
9566 (001) jeq #0x400140e jt 2 jf 4
9567 (002) ldh [7]
9568 (003) jeq #0xaa00 jt 8 jf 4
9569 (004) ld [3]
9570 (005) jeq #0x400140e jt 6 jf 21
9571 (006) ldh [1]
9572 (007) jeq #0xaa00 jt 8 jf 21
9573 (008) ldh [19]
9574 (009) jeq #0x800 jt 10 jf 14
9575 (010) ld [33]
9576 (011) jeq #0xa141e28 jt 21 jf 12
9577 (012) ld [37]
9578 (013) jeq #0xa141e28 jt 21 jf 20
9579 (014) jeq #0x806 jt 16 jf 15
9580 (015) jeq #0x8035 jt 16 jf 20
9581 (016) ld [35]
9582 (017) jeq #0xa141e28 jt 21 jf 18
9583 (018) ld [45]
9584 (019) jeq #0xa141e28 jt 21 jf 20
9585 (020) ret #262144
9586 (021) ret #0
9587 ',
9588 }, # gateway_NAME_fddi
9589 {
9590 name => 'ip_gateway_name_fddi',
9591 skip => skip_config_def1 ('INET6') ||
9592 skip_no_ethers() ||
9593 skip_no_hosts(),
9594 DLT => 'FDDI',
9595 aliases => [
9596 'ip gateway eth-ipv4-noipv6.host123.libpcap.test',
9597 'ip gateway eth-ipv4-ipv6.host123.libpcap.test',
9598 ],
9599 unopt => '
9600 (000) ld [9]
9601 (001) jeq #0x400140e jt 2 jf 4
9602 (002) ldh [7]
9603 (003) jeq #0xaa00 jt 8 jf 4
9604 (004) ld [3]
9605 (005) jeq #0x400140e jt 6 jf 15
9606 (006) ldh [1]
9607 (007) jeq #0xaa00 jt 8 jf 15
9608 (008) ldh [19]
9609 (009) jeq #0x800 jt 10 jf 14
9610 (010) ld [33]
9611 (011) jeq #0xa141e28 jt 15 jf 12
9612 (012) ld [37]
9613 (013) jeq #0xa141e28 jt 15 jf 14
9614 (014) ret #262144
9615 (015) ret #0
9616 ',
9617 }, # ip_gateway_name_fddi
9618 {
9619 name => 'ip_gateway_NAME_fddi',
9620 skip => skip_config_def1 ('INET6') ||
9621 skip_no_ethers_casecmp() ||
9622 skip_no_hosts_casecmp(),
9623 DLT => 'FDDI',
9624 aliases => [
9625 'ip gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
9626 'ip gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
9627 ],
9628 unopt => '
9629 (000) ld [9]
9630 (001) jeq #0x400140e jt 2 jf 4
9631 (002) ldh [7]
9632 (003) jeq #0xaa00 jt 8 jf 4
9633 (004) ld [3]
9634 (005) jeq #0x400140e jt 6 jf 15
9635 (006) ldh [1]
9636 (007) jeq #0xaa00 jt 8 jf 15
9637 (008) ldh [19]
9638 (009) jeq #0x800 jt 10 jf 14
9639 (010) ld [33]
9640 (011) jeq #0xa141e28 jt 15 jf 12
9641 (012) ld [37]
9642 (013) jeq #0xa141e28 jt 15 jf 14
9643 (014) ret #262144
9644 (015) ret #0
9645 ',
9646 }, # ip_gateway_NAME_fddi
9647 {
9648 name => 'arp_gateway_name_fddi',
9649 skip => skip_config_def1 ('INET6') ||
9650 skip_no_ethers() ||
9651 skip_no_hosts(),
9652 DLT => 'FDDI',
9653 aliases => [
9654 'arp gateway eth-ipv4-noipv6.host123.libpcap.test',
9655 'arp gateway eth-ipv4-ipv6.host123.libpcap.test',
9656 ],
9657 unopt => '
9658 (000) ld [9]
9659 (001) jeq #0x400140e jt 2 jf 4
9660 (002) ldh [7]
9661 (003) jeq #0xaa00 jt 8 jf 4
9662 (004) ld [3]
9663 (005) jeq #0x400140e jt 6 jf 15
9664 (006) ldh [1]
9665 (007) jeq #0xaa00 jt 8 jf 15
9666 (008) ldh [19]
9667 (009) jeq #0x806 jt 10 jf 14
9668 (010) ld [35]
9669 (011) jeq #0xa141e28 jt 15 jf 12
9670 (012) ld [45]
9671 (013) jeq #0xa141e28 jt 15 jf 14
9672 (014) ret #262144
9673 (015) ret #0
9674 ',
9675 }, # arp_gateway_name_fddi
9676 {
9677 name => 'arp_gateway_NAME_fddi',
9678 skip => skip_config_def1 ('INET6') ||
9679 skip_no_ethers_casecmp() ||
9680 skip_no_hosts_casecmp(),
9681 DLT => 'FDDI',
9682 aliases => [
9683 'arp gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
9684 'arp gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
9685 ],
9686 unopt => '
9687 (000) ld [9]
9688 (001) jeq #0x400140e jt 2 jf 4
9689 (002) ldh [7]
9690 (003) jeq #0xaa00 jt 8 jf 4
9691 (004) ld [3]
9692 (005) jeq #0x400140e jt 6 jf 15
9693 (006) ldh [1]
9694 (007) jeq #0xaa00 jt 8 jf 15
9695 (008) ldh [19]
9696 (009) jeq #0x806 jt 10 jf 14
9697 (010) ld [35]
9698 (011) jeq #0xa141e28 jt 15 jf 12
9699 (012) ld [45]
9700 (013) jeq #0xa141e28 jt 15 jf 14
9701 (014) ret #262144
9702 (015) ret #0
9703 ',
9704 }, # arp_gateway_NAME_fddi
9705 {
9706 name => 'rarp_gateway_name_fddi',
9707 skip => skip_config_def1 ('INET6') ||
9708 skip_no_ethers() ||
9709 skip_no_hosts(),
9710 DLT => 'FDDI',
9711 aliases => [
9712 'rarp gateway eth-ipv4-noipv6.host123.libpcap.test',
9713 'rarp gateway eth-ipv4-ipv6.host123.libpcap.test',
9714 ],
9715 unopt => '
9716 (000) ld [9]
9717 (001) jeq #0x400140e jt 2 jf 4
9718 (002) ldh [7]
9719 (003) jeq #0xaa00 jt 8 jf 4
9720 (004) ld [3]
9721 (005) jeq #0x400140e jt 6 jf 15
9722 (006) ldh [1]
9723 (007) jeq #0xaa00 jt 8 jf 15
9724 (008) ldh [19]
9725 (009) jeq #0x8035 jt 10 jf 14
9726 (010) ld [35]
9727 (011) jeq #0xa141e28 jt 15 jf 12
9728 (012) ld [45]
9729 (013) jeq #0xa141e28 jt 15 jf 14
9730 (014) ret #262144
9731 (015) ret #0
9732 ',
9733 }, # rarp_gateway_name_fddi
9734 {
9735 name => 'rarp_gateway_NAME_fddi',
9736 skip => skip_config_def1 ('INET6') ||
9737 skip_no_ethers_casecmp() ||
9738 skip_no_hosts_casecmp(),
9739 DLT => 'FDDI',
9740 aliases => [
9741 'rarp gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
9742 'rarp gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
9743 ],
9744 unopt => '
9745 (000) ld [9]
9746 (001) jeq #0x400140e jt 2 jf 4
9747 (002) ldh [7]
9748 (003) jeq #0xaa00 jt 8 jf 4
9749 (004) ld [3]
9750 (005) jeq #0x400140e jt 6 jf 15
9751 (006) ldh [1]
9752 (007) jeq #0xaa00 jt 8 jf 15
9753 (008) ldh [19]
9754 (009) jeq #0x8035 jt 10 jf 14
9755 (010) ld [35]
9756 (011) jeq #0xa141e28 jt 15 jf 12
9757 (012) ld [45]
9758 (013) jeq #0xa141e28 jt 15 jf 14
9759 (014) ret #262144
9760 (015) ret #0
9761 ',
9762 }, # rarp_gateway_NAME_fddi
9763 {
9764 name => 'gateway_name_ieee802',
9765 skip => skip_config_def1 ('INET6') ||
9766 skip_no_ethers() ||
9767 skip_no_hosts(),
9768 DLT => 'IEEE802',
9769 aliases => [
9770 'gateway eth-ipv4-noipv6.host123.libpcap.test',
9771 'gateway eth-ipv4-ipv6.host123.libpcap.test',
9772 ],
9773 opt => '
9774 (000) ld [10]
9775 (001) jeq #0x400140e jt 2 jf 4
9776 (002) ldh [8]
9777 (003) jeq #0xaa00 jt 8 jf 4
9778 (004) ld [4]
9779 (005) jeq #0x400140e jt 6 jf 21
9780 (006) ldh [2]
9781 (007) jeq #0xaa00 jt 8 jf 21
9782 (008) ldh [20]
9783 (009) jeq #0x800 jt 10 jf 14
9784 (010) ld [34]
9785 (011) jeq #0xa141e28 jt 21 jf 12
9786 (012) ld [38]
9787 (013) jeq #0xa141e28 jt 21 jf 20
9788 (014) jeq #0x806 jt 16 jf 15
9789 (015) jeq #0x8035 jt 16 jf 20
9790 (016) ld [36]
9791 (017) jeq #0xa141e28 jt 21 jf 18
9792 (018) ld [46]
9793 (019) jeq #0xa141e28 jt 21 jf 20
9794 (020) ret #262144
9795 (021) ret #0
9796 ',
9797 }, # gateway_name_ieee802
9798 {
9799 name => 'gateway_NAME_ieee802',
9800 skip => skip_config_def1 ('INET6') ||
9801 skip_no_ethers_casecmp() ||
9802 skip_no_hosts_casecmp(),
9803 DLT => 'IEEE802',
9804 aliases => [
9805 'gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
9806 'gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
9807 ],
9808 opt => '
9809 (000) ld [10]
9810 (001) jeq #0x400140e jt 2 jf 4
9811 (002) ldh [8]
9812 (003) jeq #0xaa00 jt 8 jf 4
9813 (004) ld [4]
9814 (005) jeq #0x400140e jt 6 jf 21
9815 (006) ldh [2]
9816 (007) jeq #0xaa00 jt 8 jf 21
9817 (008) ldh [20]
9818 (009) jeq #0x800 jt 10 jf 14
9819 (010) ld [34]
9820 (011) jeq #0xa141e28 jt 21 jf 12
9821 (012) ld [38]
9822 (013) jeq #0xa141e28 jt 21 jf 20
9823 (014) jeq #0x806 jt 16 jf 15
9824 (015) jeq #0x8035 jt 16 jf 20
9825 (016) ld [36]
9826 (017) jeq #0xa141e28 jt 21 jf 18
9827 (018) ld [46]
9828 (019) jeq #0xa141e28 jt 21 jf 20
9829 (020) ret #262144
9830 (021) ret #0
9831 ',
9832 }, # gateway_NAME_ieee802
9833 {
9834 name => 'ip_gateway_name_ieee802',
9835 skip => skip_config_def1 ('INET6') ||
9836 skip_no_ethers() ||
9837 skip_no_hosts(),
9838 DLT => 'IEEE802',
9839 aliases => [
9840 'ip gateway eth-ipv4-noipv6.host123.libpcap.test',
9841 'ip gateway eth-ipv4-ipv6.host123.libpcap.test',
9842 ],
9843 unopt => '
9844 (000) ld [10]
9845 (001) jeq #0x400140e jt 2 jf 4
9846 (002) ldh [8]
9847 (003) jeq #0xaa00 jt 8 jf 4
9848 (004) ld [4]
9849 (005) jeq #0x400140e jt 6 jf 15
9850 (006) ldh [2]
9851 (007) jeq #0xaa00 jt 8 jf 15
9852 (008) ldh [20]
9853 (009) jeq #0x800 jt 10 jf 14
9854 (010) ld [34]
9855 (011) jeq #0xa141e28 jt 15 jf 12
9856 (012) ld [38]
9857 (013) jeq #0xa141e28 jt 15 jf 14
9858 (014) ret #262144
9859 (015) ret #0
9860 ',
9861 }, # ip_gateway_name_ieee802
9862 {
9863 name => 'ip_gateway_NAME_ieee802',
9864 skip => skip_config_def1 ('INET6') ||
9865 skip_no_ethers_casecmp() ||
9866 skip_no_hosts_casecmp(),
9867 DLT => 'IEEE802',
9868 aliases => [
9869 'ip gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
9870 'ip gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
9871 ],
9872 unopt => '
9873 (000) ld [10]
9874 (001) jeq #0x400140e jt 2 jf 4
9875 (002) ldh [8]
9876 (003) jeq #0xaa00 jt 8 jf 4
9877 (004) ld [4]
9878 (005) jeq #0x400140e jt 6 jf 15
9879 (006) ldh [2]
9880 (007) jeq #0xaa00 jt 8 jf 15
9881 (008) ldh [20]
9882 (009) jeq #0x800 jt 10 jf 14
9883 (010) ld [34]
9884 (011) jeq #0xa141e28 jt 15 jf 12
9885 (012) ld [38]
9886 (013) jeq #0xa141e28 jt 15 jf 14
9887 (014) ret #262144
9888 (015) ret #0
9889 ',
9890 }, # ip_gateway_NAME_ieee802
9891 {
9892 name => 'arp_gateway_name_ieee802',
9893 skip => skip_config_def1 ('INET6') ||
9894 skip_no_ethers() ||
9895 skip_no_hosts(),
9896 DLT => 'IEEE802',
9897 aliases => [
9898 'arp gateway eth-ipv4-noipv6.host123.libpcap.test',
9899 'arp gateway eth-ipv4-ipv6.host123.libpcap.test',
9900 ],
9901 unopt => '
9902 (000) ld [10]
9903 (001) jeq #0x400140e jt 2 jf 4
9904 (002) ldh [8]
9905 (003) jeq #0xaa00 jt 8 jf 4
9906 (004) ld [4]
9907 (005) jeq #0x400140e jt 6 jf 15
9908 (006) ldh [2]
9909 (007) jeq #0xaa00 jt 8 jf 15
9910 (008) ldh [20]
9911 (009) jeq #0x806 jt 10 jf 14
9912 (010) ld [36]
9913 (011) jeq #0xa141e28 jt 15 jf 12
9914 (012) ld [46]
9915 (013) jeq #0xa141e28 jt 15 jf 14
9916 (014) ret #262144
9917 (015) ret #0
9918 ',
9919 }, # arp_gateway_name_ieee802
9920 {
9921 name => 'arp_gateway_NAME_ieee802',
9922 skip => skip_config_def1 ('INET6') ||
9923 skip_no_ethers_casecmp() ||
9924 skip_no_hosts_casecmp(),
9925 DLT => 'IEEE802',
9926 aliases => [
9927 'arp gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
9928 'arp gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
9929 ],
9930 unopt => '
9931 (000) ld [10]
9932 (001) jeq #0x400140e jt 2 jf 4
9933 (002) ldh [8]
9934 (003) jeq #0xaa00 jt 8 jf 4
9935 (004) ld [4]
9936 (005) jeq #0x400140e jt 6 jf 15
9937 (006) ldh [2]
9938 (007) jeq #0xaa00 jt 8 jf 15
9939 (008) ldh [20]
9940 (009) jeq #0x806 jt 10 jf 14
9941 (010) ld [36]
9942 (011) jeq #0xa141e28 jt 15 jf 12
9943 (012) ld [46]
9944 (013) jeq #0xa141e28 jt 15 jf 14
9945 (014) ret #262144
9946 (015) ret #0
9947 ',
9948 }, # arp_gateway_NAME_ieee802
9949 {
9950 name => 'rarp_gateway_name_ieee802',
9951 skip => skip_config_def1 ('INET6') ||
9952 skip_no_ethers() ||
9953 skip_no_hosts(),
9954 DLT => 'IEEE802',
9955 aliases => [
9956 'rarp gateway eth-ipv4-noipv6.host123.libpcap.test',
9957 'rarp gateway eth-ipv4-ipv6.host123.libpcap.test',
9958 ],
9959 unopt => '
9960 (000) ld [10]
9961 (001) jeq #0x400140e jt 2 jf 4
9962 (002) ldh [8]
9963 (003) jeq #0xaa00 jt 8 jf 4
9964 (004) ld [4]
9965 (005) jeq #0x400140e jt 6 jf 15
9966 (006) ldh [2]
9967 (007) jeq #0xaa00 jt 8 jf 15
9968 (008) ldh [20]
9969 (009) jeq #0x8035 jt 10 jf 14
9970 (010) ld [36]
9971 (011) jeq #0xa141e28 jt 15 jf 12
9972 (012) ld [46]
9973 (013) jeq #0xa141e28 jt 15 jf 14
9974 (014) ret #262144
9975 (015) ret #0
9976 ',
9977 }, # rarp_gateway_name_ieee802
9978 {
9979 name => 'rarp_gateway_NAME_ieee802',
9980 skip => skip_config_def1 ('INET6') ||
9981 skip_no_ethers_casecmp() ||
9982 skip_no_hosts_casecmp(),
9983 DLT => 'IEEE802',
9984 aliases => [
9985 'rarp gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
9986 'rarp gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
9987 ],
9988 unopt => '
9989 (000) ld [10]
9990 (001) jeq #0x400140e jt 2 jf 4
9991 (002) ldh [8]
9992 (003) jeq #0xaa00 jt 8 jf 4
9993 (004) ld [4]
9994 (005) jeq #0x400140e jt 6 jf 15
9995 (006) ldh [2]
9996 (007) jeq #0xaa00 jt 8 jf 15
9997 (008) ldh [20]
9998 (009) jeq #0x8035 jt 10 jf 14
9999 (010) ld [36]
10000 (011) jeq #0xa141e28 jt 15 jf 12
10001 (012) ld [46]
10002 (013) jeq #0xa141e28 jt 15 jf 14
10003 (014) ret #262144
10004 (015) ret #0
10005 ',
10006 }, # rarp_gateway_NAME_ieee802
10007 # TODO: Verify identity with DLT_PRISM_HEADER, DLT_IEEE802_11_RADIO_AVS,
10008 # DLT_IEEE802_11_RADIO and DLT_PPI in all DLT_IEEE802_11 gateway tests.
10009 {
10010 name => 'gateway_name_ieee802_11',
10011 skip => skip_config_def1 ('INET6') ||
10012 skip_no_ethers() ||
10013 skip_no_hosts(),
10014 DLT => 'IEEE802_11',
10015 aliases => [
10016 'gateway eth-ipv4-noipv6.host123.libpcap.test',
10017 'gateway eth-ipv4-ipv6.host123.libpcap.test',
10018 ],
10019 opt => '
10020 (000) ldx #0x0
10021 (001) txa
10022 (002) add #24
10023 (003) st M[0]
10024 (004) ldb [x + 0]
10025 (005) jset #0x8 jt 6 jf 11
10026 (006) jset #0x4 jt 11 jf 7
10027 (007) jset #0x80 jt 8 jf 11
10028 (008) ld M[0]
10029 (009) add #2
10030 (010) st M[0]
10031 (011) ldb [0]
10032 (012) jset #0x4 jt 41 jf 13
10033 (013) ldb [0]
10034 (014) jset #0x8 jt 19 jf 15
10035 (015) ld [12]
10036 (016) jeq #0x400140e jt 17 jf 19
10037 (017) ldh [10]
10038 (018) jeq #0xaa00 jt 63 jf 19
10039 (019) ldb [0]
10040 (020) jset #0x8 jt 21 jf 41
10041 (021) ldb [1]
10042 (022) jset #0x2 jt 27 jf 23
10043 (023) ld [12]
10044 (024) jeq #0x400140e jt 25 jf 27
10045 (025) ldh [10]
10046 (026) jeq #0xaa00 jt 63 jf 27
10047 (027) ldb [1]
10048 (028) jset #0x2 jt 29 jf 41
10049 (029) ldb [1]
10050 (030) jset #0x1 jt 35 jf 31
10051 (031) ld [18]
10052 (032) jeq #0x400140e jt 33 jf 35
10053 (033) ldh [16]
10054 (034) jeq #0xaa00 jt 63 jf 35
10055 (035) ldb [1]
10056 (036) jset #0x1 jt 37 jf 41
10057 (037) ld [26]
10058 (038) jeq #0x400140e jt 39 jf 41
10059 (039) ldh [24]
10060 (040) jeq #0xaa00 jt 63 jf 41
10061 (041) ldb [0]
10062 (042) jset #0x4 jt 100 jf 43
10063 (043) ldb [0]
10064 (044) jset #0x8 jt 49 jf 45
10065 (045) ld [6]
10066 (046) jeq #0x400140e jt 47 jf 49
10067 (047) ldh [4]
10068 (048) jeq #0xaa00 jt 63 jf 49
10069 (049) ldb [0]
10070 (050) jset #0x8 jt 51 jf 100
10071 (051) ldb [1]
10072 (052) jset #0x1 jt 57 jf 53
10073 (053) ld [6]
10074 (054) jeq #0x400140e jt 55 jf 57
10075 (055) ldh [4]
10076 (056) jeq #0xaa00 jt 63 jf 57
10077 (057) ldb [1]
10078 (058) jset #0x1 jt 59 jf 100
10079 (059) ld [18]
10080 (060) jeq #0x400140e jt 61 jf 100
10081 (061) ldh [16]
10082 (062) jeq #0xaa00 jt 63 jf 100
10083 (063) ldb [0]
10084 (064) and #0xc
10085 (065) jeq #0x8 jt 66 jf 75
10086 (066) ldx M[0]
10087 (067) ldh [x + 6]
10088 (068) jeq #0x800 jt 69 jf 75
10089 (069) ldx M[0]
10090 (070) ld [x + 20]
10091 (071) jeq #0xa141e28 jt 100 jf 72
10092 (072) ldx M[0]
10093 (073) ld [x + 24]
10094 (074) jeq #0xa141e28 jt 100 jf 75
10095 (075) ldb [0]
10096 (076) and #0xc
10097 (077) jeq #0x8 jt 78 jf 87
10098 (078) ldx M[0]
10099 (079) ldh [x + 6]
10100 (080) jeq #0x806 jt 81 jf 87
10101 (081) ldx M[0]
10102 (082) ld [x + 22]
10103 (083) jeq #0xa141e28 jt 100 jf 84
10104 (084) ldx M[0]
10105 (085) ld [x + 32]
10106 (086) jeq #0xa141e28 jt 100 jf 87
10107 (087) ldb [0]
10108 (088) and #0xc
10109 (089) jeq #0x8 jt 90 jf 99
10110 (090) ldx M[0]
10111 (091) ldh [x + 6]
10112 (092) jeq #0x8035 jt 93 jf 99
10113 (093) ldx M[0]
10114 (094) ld [x + 22]
10115 (095) jeq #0xa141e28 jt 100 jf 96
10116 (096) ldx M[0]
10117 (097) ld [x + 32]
10118 (098) jeq #0xa141e28 jt 100 jf 99
10119 (099) ret #262144
10120 (100) ret #0
10121 ',
10122 }, # gateway_name_ieee802_11
10123 {
10124 name => 'gateway_NAME_ieee802_11',
10125 skip => skip_config_def1 ('INET6') ||
10126 skip_no_ethers_casecmp() ||
10127 skip_no_hosts_casecmp(),
10128 DLT => 'IEEE802_11',
10129 aliases => [
10130 'gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
10131 'gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
10132 ],
10133 opt => '
10134 (000) ldx #0x0
10135 (001) txa
10136 (002) add #24
10137 (003) st M[0]
10138 (004) ldb [x + 0]
10139 (005) jset #0x8 jt 6 jf 11
10140 (006) jset #0x4 jt 11 jf 7
10141 (007) jset #0x80 jt 8 jf 11
10142 (008) ld M[0]
10143 (009) add #2
10144 (010) st M[0]
10145 (011) ldb [0]
10146 (012) jset #0x4 jt 41 jf 13
10147 (013) ldb [0]
10148 (014) jset #0x8 jt 19 jf 15
10149 (015) ld [12]
10150 (016) jeq #0x400140e jt 17 jf 19
10151 (017) ldh [10]
10152 (018) jeq #0xaa00 jt 63 jf 19
10153 (019) ldb [0]
10154 (020) jset #0x8 jt 21 jf 41
10155 (021) ldb [1]
10156 (022) jset #0x2 jt 27 jf 23
10157 (023) ld [12]
10158 (024) jeq #0x400140e jt 25 jf 27
10159 (025) ldh [10]
10160 (026) jeq #0xaa00 jt 63 jf 27
10161 (027) ldb [1]
10162 (028) jset #0x2 jt 29 jf 41
10163 (029) ldb [1]
10164 (030) jset #0x1 jt 35 jf 31
10165 (031) ld [18]
10166 (032) jeq #0x400140e jt 33 jf 35
10167 (033) ldh [16]
10168 (034) jeq #0xaa00 jt 63 jf 35
10169 (035) ldb [1]
10170 (036) jset #0x1 jt 37 jf 41
10171 (037) ld [26]
10172 (038) jeq #0x400140e jt 39 jf 41
10173 (039) ldh [24]
10174 (040) jeq #0xaa00 jt 63 jf 41
10175 (041) ldb [0]
10176 (042) jset #0x4 jt 100 jf 43
10177 (043) ldb [0]
10178 (044) jset #0x8 jt 49 jf 45
10179 (045) ld [6]
10180 (046) jeq #0x400140e jt 47 jf 49
10181 (047) ldh [4]
10182 (048) jeq #0xaa00 jt 63 jf 49
10183 (049) ldb [0]
10184 (050) jset #0x8 jt 51 jf 100
10185 (051) ldb [1]
10186 (052) jset #0x1 jt 57 jf 53
10187 (053) ld [6]
10188 (054) jeq #0x400140e jt 55 jf 57
10189 (055) ldh [4]
10190 (056) jeq #0xaa00 jt 63 jf 57
10191 (057) ldb [1]
10192 (058) jset #0x1 jt 59 jf 100
10193 (059) ld [18]
10194 (060) jeq #0x400140e jt 61 jf 100
10195 (061) ldh [16]
10196 (062) jeq #0xaa00 jt 63 jf 100
10197 (063) ldb [0]
10198 (064) and #0xc
10199 (065) jeq #0x8 jt 66 jf 75
10200 (066) ldx M[0]
10201 (067) ldh [x + 6]
10202 (068) jeq #0x800 jt 69 jf 75
10203 (069) ldx M[0]
10204 (070) ld [x + 20]
10205 (071) jeq #0xa141e28 jt 100 jf 72
10206 (072) ldx M[0]
10207 (073) ld [x + 24]
10208 (074) jeq #0xa141e28 jt 100 jf 75
10209 (075) ldb [0]
10210 (076) and #0xc
10211 (077) jeq #0x8 jt 78 jf 87
10212 (078) ldx M[0]
10213 (079) ldh [x + 6]
10214 (080) jeq #0x806 jt 81 jf 87
10215 (081) ldx M[0]
10216 (082) ld [x + 22]
10217 (083) jeq #0xa141e28 jt 100 jf 84
10218 (084) ldx M[0]
10219 (085) ld [x + 32]
10220 (086) jeq #0xa141e28 jt 100 jf 87
10221 (087) ldb [0]
10222 (088) and #0xc
10223 (089) jeq #0x8 jt 90 jf 99
10224 (090) ldx M[0]
10225 (091) ldh [x + 6]
10226 (092) jeq #0x8035 jt 93 jf 99
10227 (093) ldx M[0]
10228 (094) ld [x + 22]
10229 (095) jeq #0xa141e28 jt 100 jf 96
10230 (096) ldx M[0]
10231 (097) ld [x + 32]
10232 (098) jeq #0xa141e28 jt 100 jf 99
10233 (099) ret #262144
10234 (100) ret #0
10235 ',
10236 }, # gateway_NAME_ieee802_11
10237 {
10238 name => 'ip_gateway_name_ieee802_11',
10239 skip => skip_config_def1 ('INET6') ||
10240 skip_no_ethers() ||
10241 skip_no_hosts(),
10242 DLT => 'IEEE802_11',
10243 aliases => [
10244 'ip gateway eth-ipv4-noipv6.host123.libpcap.test',
10245 'ip gateway eth-ipv4-ipv6.host123.libpcap.test',
10246 ],
10247 opt => '
10248 (000) ldx #0x0
10249 (001) txa
10250 (002) add #24
10251 (003) st M[0]
10252 (004) ldb [x + 0]
10253 (005) jset #0x8 jt 6 jf 11
10254 (006) jset #0x4 jt 11 jf 7
10255 (007) jset #0x80 jt 8 jf 11
10256 (008) ld M[0]
10257 (009) add #2
10258 (010) st M[0]
10259 (011) ldb [0]
10260 (012) jset #0x4 jt 41 jf 13
10261 (013) ldb [0]
10262 (014) jset #0x8 jt 19 jf 15
10263 (015) ld [12]
10264 (016) jeq #0x400140e jt 17 jf 19
10265 (017) ldh [10]
10266 (018) jeq #0xaa00 jt 63 jf 19
10267 (019) ldb [0]
10268 (020) jset #0x8 jt 21 jf 41
10269 (021) ldb [1]
10270 (022) jset #0x2 jt 27 jf 23
10271 (023) ld [12]
10272 (024) jeq #0x400140e jt 25 jf 27
10273 (025) ldh [10]
10274 (026) jeq #0xaa00 jt 63 jf 27
10275 (027) ldb [1]
10276 (028) jset #0x2 jt 29 jf 41
10277 (029) ldb [1]
10278 (030) jset #0x1 jt 35 jf 31
10279 (031) ld [18]
10280 (032) jeq #0x400140e jt 33 jf 35
10281 (033) ldh [16]
10282 (034) jeq #0xaa00 jt 63 jf 35
10283 (035) ldb [1]
10284 (036) jset #0x1 jt 37 jf 41
10285 (037) ld [26]
10286 (038) jeq #0x400140e jt 39 jf 41
10287 (039) ldh [24]
10288 (040) jeq #0xaa00 jt 63 jf 41
10289 (041) ldb [0]
10290 (042) jset #0x4 jt 76 jf 43
10291 (043) ldb [0]
10292 (044) jset #0x8 jt 49 jf 45
10293 (045) ld [6]
10294 (046) jeq #0x400140e jt 47 jf 49
10295 (047) ldh [4]
10296 (048) jeq #0xaa00 jt 63 jf 49
10297 (049) ldb [0]
10298 (050) jset #0x8 jt 51 jf 76
10299 (051) ldb [1]
10300 (052) jset #0x1 jt 57 jf 53
10301 (053) ld [6]
10302 (054) jeq #0x400140e jt 55 jf 57
10303 (055) ldh [4]
10304 (056) jeq #0xaa00 jt 63 jf 57
10305 (057) ldb [1]
10306 (058) jset #0x1 jt 59 jf 76
10307 (059) ld [18]
10308 (060) jeq #0x400140e jt 61 jf 76
10309 (061) ldh [16]
10310 (062) jeq #0xaa00 jt 63 jf 76
10311 (063) ldb [0]
10312 (064) and #0xc
10313 (065) jeq #0x8 jt 66 jf 75
10314 (066) ldx M[0]
10315 (067) ldh [x + 6]
10316 (068) jeq #0x800 jt 69 jf 75
10317 (069) ldx M[0]
10318 (070) ld [x + 20]
10319 (071) jeq #0xa141e28 jt 76 jf 72
10320 (072) ldx M[0]
10321 (073) ld [x + 24]
10322 (074) jeq #0xa141e28 jt 76 jf 75
10323 (075) ret #262144
10324 (076) ret #0
10325 ',
10326 }, # ip_gateway_name_ieee802_11
10327 {
10328 name => 'ip_gateway_NAME_ieee802_11',
10329 skip => skip_config_def1 ('INET6') ||
10330 skip_no_ethers_casecmp() ||
10331 skip_no_hosts_casecmp(),
10332 DLT => 'IEEE802_11',
10333 aliases => [
10334 'ip gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
10335 'ip gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
10336 ],
10337 opt => '
10338 (000) ldx #0x0
10339 (001) txa
10340 (002) add #24
10341 (003) st M[0]
10342 (004) ldb [x + 0]
10343 (005) jset #0x8 jt 6 jf 11
10344 (006) jset #0x4 jt 11 jf 7
10345 (007) jset #0x80 jt 8 jf 11
10346 (008) ld M[0]
10347 (009) add #2
10348 (010) st M[0]
10349 (011) ldb [0]
10350 (012) jset #0x4 jt 41 jf 13
10351 (013) ldb [0]
10352 (014) jset #0x8 jt 19 jf 15
10353 (015) ld [12]
10354 (016) jeq #0x400140e jt 17 jf 19
10355 (017) ldh [10]
10356 (018) jeq #0xaa00 jt 63 jf 19
10357 (019) ldb [0]
10358 (020) jset #0x8 jt 21 jf 41
10359 (021) ldb [1]
10360 (022) jset #0x2 jt 27 jf 23
10361 (023) ld [12]
10362 (024) jeq #0x400140e jt 25 jf 27
10363 (025) ldh [10]
10364 (026) jeq #0xaa00 jt 63 jf 27
10365 (027) ldb [1]
10366 (028) jset #0x2 jt 29 jf 41
10367 (029) ldb [1]
10368 (030) jset #0x1 jt 35 jf 31
10369 (031) ld [18]
10370 (032) jeq #0x400140e jt 33 jf 35
10371 (033) ldh [16]
10372 (034) jeq #0xaa00 jt 63 jf 35
10373 (035) ldb [1]
10374 (036) jset #0x1 jt 37 jf 41
10375 (037) ld [26]
10376 (038) jeq #0x400140e jt 39 jf 41
10377 (039) ldh [24]
10378 (040) jeq #0xaa00 jt 63 jf 41
10379 (041) ldb [0]
10380 (042) jset #0x4 jt 76 jf 43
10381 (043) ldb [0]
10382 (044) jset #0x8 jt 49 jf 45
10383 (045) ld [6]
10384 (046) jeq #0x400140e jt 47 jf 49
10385 (047) ldh [4]
10386 (048) jeq #0xaa00 jt 63 jf 49
10387 (049) ldb [0]
10388 (050) jset #0x8 jt 51 jf 76
10389 (051) ldb [1]
10390 (052) jset #0x1 jt 57 jf 53
10391 (053) ld [6]
10392 (054) jeq #0x400140e jt 55 jf 57
10393 (055) ldh [4]
10394 (056) jeq #0xaa00 jt 63 jf 57
10395 (057) ldb [1]
10396 (058) jset #0x1 jt 59 jf 76
10397 (059) ld [18]
10398 (060) jeq #0x400140e jt 61 jf 76
10399 (061) ldh [16]
10400 (062) jeq #0xaa00 jt 63 jf 76
10401 (063) ldb [0]
10402 (064) and #0xc
10403 (065) jeq #0x8 jt 66 jf 75
10404 (066) ldx M[0]
10405 (067) ldh [x + 6]
10406 (068) jeq #0x800 jt 69 jf 75
10407 (069) ldx M[0]
10408 (070) ld [x + 20]
10409 (071) jeq #0xa141e28 jt 76 jf 72
10410 (072) ldx M[0]
10411 (073) ld [x + 24]
10412 (074) jeq #0xa141e28 jt 76 jf 75
10413 (075) ret #262144
10414 (076) ret #0
10415 ',
10416 }, # ip_gateway_NAME_ieee802_11
10417 {
10418 name => 'arp_gateway_name_ieee802_11',
10419 skip => skip_config_def1 ('INET6') ||
10420 skip_no_ethers() ||
10421 skip_no_hosts(),
10422 DLT => 'IEEE802_11',
10423 aliases => [
10424 'arp gateway eth-ipv4-noipv6.host123.libpcap.test',
10425 'arp gateway eth-ipv4-ipv6.host123.libpcap.test',
10426 ],
10427 opt => '
10428 (000) ldx #0x0
10429 (001) txa
10430 (002) add #24
10431 (003) st M[0]
10432 (004) ldb [x + 0]
10433 (005) jset #0x8 jt 6 jf 11
10434 (006) jset #0x4 jt 11 jf 7
10435 (007) jset #0x80 jt 8 jf 11
10436 (008) ld M[0]
10437 (009) add #2
10438 (010) st M[0]
10439 (011) ldb [0]
10440 (012) jset #0x4 jt 41 jf 13
10441 (013) ldb [0]
10442 (014) jset #0x8 jt 19 jf 15
10443 (015) ld [12]
10444 (016) jeq #0x400140e jt 17 jf 19
10445 (017) ldh [10]
10446 (018) jeq #0xaa00 jt 63 jf 19
10447 (019) ldb [0]
10448 (020) jset #0x8 jt 21 jf 41
10449 (021) ldb [1]
10450 (022) jset #0x2 jt 27 jf 23
10451 (023) ld [12]
10452 (024) jeq #0x400140e jt 25 jf 27
10453 (025) ldh [10]
10454 (026) jeq #0xaa00 jt 63 jf 27
10455 (027) ldb [1]
10456 (028) jset #0x2 jt 29 jf 41
10457 (029) ldb [1]
10458 (030) jset #0x1 jt 35 jf 31
10459 (031) ld [18]
10460 (032) jeq #0x400140e jt 33 jf 35
10461 (033) ldh [16]
10462 (034) jeq #0xaa00 jt 63 jf 35
10463 (035) ldb [1]
10464 (036) jset #0x1 jt 37 jf 41
10465 (037) ld [26]
10466 (038) jeq #0x400140e jt 39 jf 41
10467 (039) ldh [24]
10468 (040) jeq #0xaa00 jt 63 jf 41
10469 (041) ldb [0]
10470 (042) jset #0x4 jt 76 jf 43
10471 (043) ldb [0]
10472 (044) jset #0x8 jt 49 jf 45
10473 (045) ld [6]
10474 (046) jeq #0x400140e jt 47 jf 49
10475 (047) ldh [4]
10476 (048) jeq #0xaa00 jt 63 jf 49
10477 (049) ldb [0]
10478 (050) jset #0x8 jt 51 jf 76
10479 (051) ldb [1]
10480 (052) jset #0x1 jt 57 jf 53
10481 (053) ld [6]
10482 (054) jeq #0x400140e jt 55 jf 57
10483 (055) ldh [4]
10484 (056) jeq #0xaa00 jt 63 jf 57
10485 (057) ldb [1]
10486 (058) jset #0x1 jt 59 jf 76
10487 (059) ld [18]
10488 (060) jeq #0x400140e jt 61 jf 76
10489 (061) ldh [16]
10490 (062) jeq #0xaa00 jt 63 jf 76
10491 (063) ldb [0]
10492 (064) and #0xc
10493 (065) jeq #0x8 jt 66 jf 75
10494 (066) ldx M[0]
10495 (067) ldh [x + 6]
10496 (068) jeq #0x806 jt 69 jf 75
10497 (069) ldx M[0]
10498 (070) ld [x + 22]
10499 (071) jeq #0xa141e28 jt 76 jf 72
10500 (072) ldx M[0]
10501 (073) ld [x + 32]
10502 (074) jeq #0xa141e28 jt 76 jf 75
10503 (075) ret #262144
10504 (076) ret #0
10505 ',
10506 }, # arp_gateway_name_ieee802_11
10507 {
10508 name => 'arp_gateway_NAME_ieee802_11',
10509 skip => skip_config_def1 ('INET6') ||
10510 skip_no_ethers_casecmp() ||
10511 skip_no_hosts_casecmp(),
10512 DLT => 'IEEE802_11',
10513 aliases => [
10514 'arp gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
10515 'arp gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
10516 ],
10517 opt => '
10518 (000) ldx #0x0
10519 (001) txa
10520 (002) add #24
10521 (003) st M[0]
10522 (004) ldb [x + 0]
10523 (005) jset #0x8 jt 6 jf 11
10524 (006) jset #0x4 jt 11 jf 7
10525 (007) jset #0x80 jt 8 jf 11
10526 (008) ld M[0]
10527 (009) add #2
10528 (010) st M[0]
10529 (011) ldb [0]
10530 (012) jset #0x4 jt 41 jf 13
10531 (013) ldb [0]
10532 (014) jset #0x8 jt 19 jf 15
10533 (015) ld [12]
10534 (016) jeq #0x400140e jt 17 jf 19
10535 (017) ldh [10]
10536 (018) jeq #0xaa00 jt 63 jf 19
10537 (019) ldb [0]
10538 (020) jset #0x8 jt 21 jf 41
10539 (021) ldb [1]
10540 (022) jset #0x2 jt 27 jf 23
10541 (023) ld [12]
10542 (024) jeq #0x400140e jt 25 jf 27
10543 (025) ldh [10]
10544 (026) jeq #0xaa00 jt 63 jf 27
10545 (027) ldb [1]
10546 (028) jset #0x2 jt 29 jf 41
10547 (029) ldb [1]
10548 (030) jset #0x1 jt 35 jf 31
10549 (031) ld [18]
10550 (032) jeq #0x400140e jt 33 jf 35
10551 (033) ldh [16]
10552 (034) jeq #0xaa00 jt 63 jf 35
10553 (035) ldb [1]
10554 (036) jset #0x1 jt 37 jf 41
10555 (037) ld [26]
10556 (038) jeq #0x400140e jt 39 jf 41
10557 (039) ldh [24]
10558 (040) jeq #0xaa00 jt 63 jf 41
10559 (041) ldb [0]
10560 (042) jset #0x4 jt 76 jf 43
10561 (043) ldb [0]
10562 (044) jset #0x8 jt 49 jf 45
10563 (045) ld [6]
10564 (046) jeq #0x400140e jt 47 jf 49
10565 (047) ldh [4]
10566 (048) jeq #0xaa00 jt 63 jf 49
10567 (049) ldb [0]
10568 (050) jset #0x8 jt 51 jf 76
10569 (051) ldb [1]
10570 (052) jset #0x1 jt 57 jf 53
10571 (053) ld [6]
10572 (054) jeq #0x400140e jt 55 jf 57
10573 (055) ldh [4]
10574 (056) jeq #0xaa00 jt 63 jf 57
10575 (057) ldb [1]
10576 (058) jset #0x1 jt 59 jf 76
10577 (059) ld [18]
10578 (060) jeq #0x400140e jt 61 jf 76
10579 (061) ldh [16]
10580 (062) jeq #0xaa00 jt 63 jf 76
10581 (063) ldb [0]
10582 (064) and #0xc
10583 (065) jeq #0x8 jt 66 jf 75
10584 (066) ldx M[0]
10585 (067) ldh [x + 6]
10586 (068) jeq #0x806 jt 69 jf 75
10587 (069) ldx M[0]
10588 (070) ld [x + 22]
10589 (071) jeq #0xa141e28 jt 76 jf 72
10590 (072) ldx M[0]
10591 (073) ld [x + 32]
10592 (074) jeq #0xa141e28 jt 76 jf 75
10593 (075) ret #262144
10594 (076) ret #0
10595 ',
10596 }, # arp_gateway_NAME_ieee802_11
10597 {
10598 name => 'rarp_gateway_name_ieee802_11',
10599 skip => skip_config_def1 ('INET6') ||
10600 skip_no_ethers() ||
10601 skip_no_hosts(),
10602 DLT => 'IEEE802_11',
10603 aliases => [
10604 'rarp gateway eth-ipv4-noipv6.host123.libpcap.test',
10605 'rarp gateway eth-ipv4-ipv6.host123.libpcap.test',
10606 ],
10607 opt => '
10608 (000) ldx #0x0
10609 (001) txa
10610 (002) add #24
10611 (003) st M[0]
10612 (004) ldb [x + 0]
10613 (005) jset #0x8 jt 6 jf 11
10614 (006) jset #0x4 jt 11 jf 7
10615 (007) jset #0x80 jt 8 jf 11
10616 (008) ld M[0]
10617 (009) add #2
10618 (010) st M[0]
10619 (011) ldb [0]
10620 (012) jset #0x4 jt 41 jf 13
10621 (013) ldb [0]
10622 (014) jset #0x8 jt 19 jf 15
10623 (015) ld [12]
10624 (016) jeq #0x400140e jt 17 jf 19
10625 (017) ldh [10]
10626 (018) jeq #0xaa00 jt 63 jf 19
10627 (019) ldb [0]
10628 (020) jset #0x8 jt 21 jf 41
10629 (021) ldb [1]
10630 (022) jset #0x2 jt 27 jf 23
10631 (023) ld [12]
10632 (024) jeq #0x400140e jt 25 jf 27
10633 (025) ldh [10]
10634 (026) jeq #0xaa00 jt 63 jf 27
10635 (027) ldb [1]
10636 (028) jset #0x2 jt 29 jf 41
10637 (029) ldb [1]
10638 (030) jset #0x1 jt 35 jf 31
10639 (031) ld [18]
10640 (032) jeq #0x400140e jt 33 jf 35
10641 (033) ldh [16]
10642 (034) jeq #0xaa00 jt 63 jf 35
10643 (035) ldb [1]
10644 (036) jset #0x1 jt 37 jf 41
10645 (037) ld [26]
10646 (038) jeq #0x400140e jt 39 jf 41
10647 (039) ldh [24]
10648 (040) jeq #0xaa00 jt 63 jf 41
10649 (041) ldb [0]
10650 (042) jset #0x4 jt 76 jf 43
10651 (043) ldb [0]
10652 (044) jset #0x8 jt 49 jf 45
10653 (045) ld [6]
10654 (046) jeq #0x400140e jt 47 jf 49
10655 (047) ldh [4]
10656 (048) jeq #0xaa00 jt 63 jf 49
10657 (049) ldb [0]
10658 (050) jset #0x8 jt 51 jf 76
10659 (051) ldb [1]
10660 (052) jset #0x1 jt 57 jf 53
10661 (053) ld [6]
10662 (054) jeq #0x400140e jt 55 jf 57
10663 (055) ldh [4]
10664 (056) jeq #0xaa00 jt 63 jf 57
10665 (057) ldb [1]
10666 (058) jset #0x1 jt 59 jf 76
10667 (059) ld [18]
10668 (060) jeq #0x400140e jt 61 jf 76
10669 (061) ldh [16]
10670 (062) jeq #0xaa00 jt 63 jf 76
10671 (063) ldb [0]
10672 (064) and #0xc
10673 (065) jeq #0x8 jt 66 jf 75
10674 (066) ldx M[0]
10675 (067) ldh [x + 6]
10676 (068) jeq #0x8035 jt 69 jf 75
10677 (069) ldx M[0]
10678 (070) ld [x + 22]
10679 (071) jeq #0xa141e28 jt 76 jf 72
10680 (072) ldx M[0]
10681 (073) ld [x + 32]
10682 (074) jeq #0xa141e28 jt 76 jf 75
10683 (075) ret #262144
10684 (076) ret #0
10685 ',
10686 }, # rarp_gateway_name_ieee802_11
10687 {
10688 name => 'rarp_gateway_NAME_ieee802_11',
10689 skip => skip_config_def1 ('INET6') ||
10690 skip_no_ethers_casecmp() ||
10691 skip_no_hosts_casecmp(),
10692 DLT => 'IEEE802_11',
10693 aliases => [
10694 'rarp gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
10695 'rarp gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
10696 ],
10697 opt => '
10698 (000) ldx #0x0
10699 (001) txa
10700 (002) add #24
10701 (003) st M[0]
10702 (004) ldb [x + 0]
10703 (005) jset #0x8 jt 6 jf 11
10704 (006) jset #0x4 jt 11 jf 7
10705 (007) jset #0x80 jt 8 jf 11
10706 (008) ld M[0]
10707 (009) add #2
10708 (010) st M[0]
10709 (011) ldb [0]
10710 (012) jset #0x4 jt 41 jf 13
10711 (013) ldb [0]
10712 (014) jset #0x8 jt 19 jf 15
10713 (015) ld [12]
10714 (016) jeq #0x400140e jt 17 jf 19
10715 (017) ldh [10]
10716 (018) jeq #0xaa00 jt 63 jf 19
10717 (019) ldb [0]
10718 (020) jset #0x8 jt 21 jf 41
10719 (021) ldb [1]
10720 (022) jset #0x2 jt 27 jf 23
10721 (023) ld [12]
10722 (024) jeq #0x400140e jt 25 jf 27
10723 (025) ldh [10]
10724 (026) jeq #0xaa00 jt 63 jf 27
10725 (027) ldb [1]
10726 (028) jset #0x2 jt 29 jf 41
10727 (029) ldb [1]
10728 (030) jset #0x1 jt 35 jf 31
10729 (031) ld [18]
10730 (032) jeq #0x400140e jt 33 jf 35
10731 (033) ldh [16]
10732 (034) jeq #0xaa00 jt 63 jf 35
10733 (035) ldb [1]
10734 (036) jset #0x1 jt 37 jf 41
10735 (037) ld [26]
10736 (038) jeq #0x400140e jt 39 jf 41
10737 (039) ldh [24]
10738 (040) jeq #0xaa00 jt 63 jf 41
10739 (041) ldb [0]
10740 (042) jset #0x4 jt 76 jf 43
10741 (043) ldb [0]
10742 (044) jset #0x8 jt 49 jf 45
10743 (045) ld [6]
10744 (046) jeq #0x400140e jt 47 jf 49
10745 (047) ldh [4]
10746 (048) jeq #0xaa00 jt 63 jf 49
10747 (049) ldb [0]
10748 (050) jset #0x8 jt 51 jf 76
10749 (051) ldb [1]
10750 (052) jset #0x1 jt 57 jf 53
10751 (053) ld [6]
10752 (054) jeq #0x400140e jt 55 jf 57
10753 (055) ldh [4]
10754 (056) jeq #0xaa00 jt 63 jf 57
10755 (057) ldb [1]
10756 (058) jset #0x1 jt 59 jf 76
10757 (059) ld [18]
10758 (060) jeq #0x400140e jt 61 jf 76
10759 (061) ldh [16]
10760 (062) jeq #0xaa00 jt 63 jf 76
10761 (063) ldb [0]
10762 (064) and #0xc
10763 (065) jeq #0x8 jt 66 jf 75
10764 (066) ldx M[0]
10765 (067) ldh [x + 6]
10766 (068) jeq #0x8035 jt 69 jf 75
10767 (069) ldx M[0]
10768 (070) ld [x + 22]
10769 (071) jeq #0xa141e28 jt 76 jf 72
10770 (072) ldx M[0]
10771 (073) ld [x + 32]
10772 (074) jeq #0xa141e28 jt 76 jf 75
10773 (075) ret #262144
10774 (076) ret #0
10775 ',
10776 }, # rarp_gateway_NAME_ieee802_11
10777 {
10778 name => 'gateway_name_ip_over_fc',
10779 skip => skip_config_def1 ('INET6') ||
10780 skip_no_ethers() ||
10781 skip_no_hosts(),
10782 DLT => 'IP_OVER_FC',
10783 aliases => [
10784 'gateway eth-ipv4-noipv6.host123.libpcap.test',
10785 'gateway eth-ipv4-ipv6.host123.libpcap.test',
10786 ],
10787 opt => '
10788 (000) ld [12]
10789 (001) jeq #0x400140e jt 2 jf 4
10790 (002) ldh [10]
10791 (003) jeq #0xaa00 jt 8 jf 4
10792 (004) ld [4]
10793 (005) jeq #0x400140e jt 6 jf 21
10794 (006) ldh [2]
10795 (007) jeq #0xaa00 jt 8 jf 21
10796 (008) ldh [22]
10797 (009) jeq #0x800 jt 10 jf 14
10798 (010) ld [36]
10799 (011) jeq #0xa141e28 jt 21 jf 12
10800 (012) ld [40]
10801 (013) jeq #0xa141e28 jt 21 jf 20
10802 (014) jeq #0x806 jt 16 jf 15
10803 (015) jeq #0x8035 jt 16 jf 20
10804 (016) ld [38]
10805 (017) jeq #0xa141e28 jt 21 jf 18
10806 (018) ld [48]
10807 (019) jeq #0xa141e28 jt 21 jf 20
10808 (020) ret #262144
10809 (021) ret #0
10810 ',
10811 }, # gateway_name_ip_over_fc
10812 {
10813 name => 'gateway_NAME_ip_over_fc',
10814 skip => skip_config_def1 ('INET6') ||
10815 skip_no_ethers_casecmp() ||
10816 skip_no_hosts_casecmp(),
10817 DLT => 'IP_OVER_FC',
10818 aliases => [
10819 'gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
10820 'gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
10821 ],
10822 opt => '
10823 (000) ld [12]
10824 (001) jeq #0x400140e jt 2 jf 4
10825 (002) ldh [10]
10826 (003) jeq #0xaa00 jt 8 jf 4
10827 (004) ld [4]
10828 (005) jeq #0x400140e jt 6 jf 21
10829 (006) ldh [2]
10830 (007) jeq #0xaa00 jt 8 jf 21
10831 (008) ldh [22]
10832 (009) jeq #0x800 jt 10 jf 14
10833 (010) ld [36]
10834 (011) jeq #0xa141e28 jt 21 jf 12
10835 (012) ld [40]
10836 (013) jeq #0xa141e28 jt 21 jf 20
10837 (014) jeq #0x806 jt 16 jf 15
10838 (015) jeq #0x8035 jt 16 jf 20
10839 (016) ld [38]
10840 (017) jeq #0xa141e28 jt 21 jf 18
10841 (018) ld [48]
10842 (019) jeq #0xa141e28 jt 21 jf 20
10843 (020) ret #262144
10844 (021) ret #0
10845 ',
10846 }, # gateway_NAME_ip_over_fc
10847 {
10848 name => 'ip_gateway_name_ip_over_fc',
10849 skip => skip_config_def1 ('INET6') ||
10850 skip_no_ethers() ||
10851 skip_no_hosts(),
10852 DLT => 'IP_OVER_FC',
10853 aliases => [
10854 'ip gateway eth-ipv4-noipv6.host123.libpcap.test',
10855 'ip gateway eth-ipv4-ipv6.host123.libpcap.test',
10856 ],
10857 unopt => '
10858 (000) ld [12]
10859 (001) jeq #0x400140e jt 2 jf 4
10860 (002) ldh [10]
10861 (003) jeq #0xaa00 jt 8 jf 4
10862 (004) ld [4]
10863 (005) jeq #0x400140e jt 6 jf 15
10864 (006) ldh [2]
10865 (007) jeq #0xaa00 jt 8 jf 15
10866 (008) ldh [22]
10867 (009) jeq #0x800 jt 10 jf 14
10868 (010) ld [36]
10869 (011) jeq #0xa141e28 jt 15 jf 12
10870 (012) ld [40]
10871 (013) jeq #0xa141e28 jt 15 jf 14
10872 (014) ret #262144
10873 (015) ret #0
10874 ',
10875 }, # ip_gateway_name_ip_over_fc
10876 {
10877 name => 'ip_gateway_NAME_ip_over_fc',
10878 skip => skip_config_def1 ('INET6') ||
10879 skip_no_ethers_casecmp() ||
10880 skip_no_hosts_casecmp(),
10881 DLT => 'IP_OVER_FC',
10882 aliases => [
10883 'ip gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
10884 'ip gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
10885 ],
10886 unopt => '
10887 (000) ld [12]
10888 (001) jeq #0x400140e jt 2 jf 4
10889 (002) ldh [10]
10890 (003) jeq #0xaa00 jt 8 jf 4
10891 (004) ld [4]
10892 (005) jeq #0x400140e jt 6 jf 15
10893 (006) ldh [2]
10894 (007) jeq #0xaa00 jt 8 jf 15
10895 (008) ldh [22]
10896 (009) jeq #0x800 jt 10 jf 14
10897 (010) ld [36]
10898 (011) jeq #0xa141e28 jt 15 jf 12
10899 (012) ld [40]
10900 (013) jeq #0xa141e28 jt 15 jf 14
10901 (014) ret #262144
10902 (015) ret #0
10903 ',
10904 }, # ip_gateway_NAME_ip_over_fc
10905 {
10906 name => 'arp_gateway_name_ip_over_fc',
10907 skip => skip_config_def1 ('INET6') ||
10908 skip_no_ethers() ||
10909 skip_no_hosts(),
10910 DLT => 'IP_OVER_FC',
10911 aliases => [
10912 'arp gateway eth-ipv4-noipv6.host123.libpcap.test',
10913 'arp gateway eth-ipv4-ipv6.host123.libpcap.test',
10914 ],
10915 unopt => '
10916 (000) ld [12]
10917 (001) jeq #0x400140e jt 2 jf 4
10918 (002) ldh [10]
10919 (003) jeq #0xaa00 jt 8 jf 4
10920 (004) ld [4]
10921 (005) jeq #0x400140e jt 6 jf 15
10922 (006) ldh [2]
10923 (007) jeq #0xaa00 jt 8 jf 15
10924 (008) ldh [22]
10925 (009) jeq #0x806 jt 10 jf 14
10926 (010) ld [38]
10927 (011) jeq #0xa141e28 jt 15 jf 12
10928 (012) ld [48]
10929 (013) jeq #0xa141e28 jt 15 jf 14
10930 (014) ret #262144
10931 (015) ret #0
10932 ',
10933 }, # arp_gateway_name_ip_over_fc
10934 {
10935 name => 'arp_gateway_NAME_ip_over_fc',
10936 skip => skip_config_def1 ('INET6') ||
10937 skip_no_ethers_casecmp() ||
10938 skip_no_hosts_casecmp(),
10939 DLT => 'IP_OVER_FC',
10940 aliases => [
10941 'arp gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
10942 'arp gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
10943 ],
10944 unopt => '
10945 (000) ld [12]
10946 (001) jeq #0x400140e jt 2 jf 4
10947 (002) ldh [10]
10948 (003) jeq #0xaa00 jt 8 jf 4
10949 (004) ld [4]
10950 (005) jeq #0x400140e jt 6 jf 15
10951 (006) ldh [2]
10952 (007) jeq #0xaa00 jt 8 jf 15
10953 (008) ldh [22]
10954 (009) jeq #0x806 jt 10 jf 14
10955 (010) ld [38]
10956 (011) jeq #0xa141e28 jt 15 jf 12
10957 (012) ld [48]
10958 (013) jeq #0xa141e28 jt 15 jf 14
10959 (014) ret #262144
10960 (015) ret #0
10961 ',
10962 }, # arp_gateway_NAME_ip_over_fc
10963 {
10964 name => 'rarp_gateway_name_ip_over_fc',
10965 skip => skip_config_def1 ('INET6') ||
10966 skip_no_ethers() ||
10967 skip_no_hosts(),
10968 DLT => 'IP_OVER_FC',
10969 aliases => [
10970 'rarp gateway eth-ipv4-noipv6.host123.libpcap.test',
10971 'rarp gateway eth-ipv4-ipv6.host123.libpcap.test',
10972 ],
10973 unopt => '
10974 (000) ld [12]
10975 (001) jeq #0x400140e jt 2 jf 4
10976 (002) ldh [10]
10977 (003) jeq #0xaa00 jt 8 jf 4
10978 (004) ld [4]
10979 (005) jeq #0x400140e jt 6 jf 15
10980 (006) ldh [2]
10981 (007) jeq #0xaa00 jt 8 jf 15
10982 (008) ldh [22]
10983 (009) jeq #0x8035 jt 10 jf 14
10984 (010) ld [38]
10985 (011) jeq #0xa141e28 jt 15 jf 12
10986 (012) ld [48]
10987 (013) jeq #0xa141e28 jt 15 jf 14
10988 (014) ret #262144
10989 (015) ret #0
10990 ',
10991 }, # rarp_gateway_name_ip_over_fc
10992 {
10993 name => 'rarp_gateway_NAME_ip_over_fc',
10994 skip => skip_config_def1 ('INET6') ||
10995 skip_no_ethers_casecmp() ||
10996 skip_no_hosts_casecmp(),
10997 DLT => 'IP_OVER_FC',
10998 aliases => [
10999 'rarp gateway ETH-IPV4-NOIPV6.HOST123.LIBPCAP.TEST',
11000 'rarp gateway ETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
11001 ],
11002 unopt => '
11003 (000) ld [12]
11004 (001) jeq #0x400140e jt 2 jf 4
11005 (002) ldh [10]
11006 (003) jeq #0xaa00 jt 8 jf 4
11007 (004) ld [4]
11008 (005) jeq #0x400140e jt 6 jf 15
11009 (006) ldh [2]
11010 (007) jeq #0xaa00 jt 8 jf 15
11011 (008) ldh [22]
11012 (009) jeq #0x8035 jt 10 jf 14
11013 (010) ld [38]
11014 (011) jeq #0xa141e28 jt 15 jf 12
11015 (012) ld [48]
11016 (013) jeq #0xa141e28 jt 15 jf 14
11017 (014) ret #262144
11018 (015) ret #0
11019 ',
11020 }, # rarp_gateway_NAME_ip_over_fc
11021 {
11022 name => 'carp',
11023 DLT => 'EN10MB',
11024 aliases => [
11025 'carp',
11026 'vrrp',
11027 'ip proto 112',
11028 ],
11029 unopt => '
11030 (000) ldh [12]
11031 (001) jeq #0x800 jt 2 jf 5
11032 (002) ldb [23]
11033 (003) jeq #0x70 jt 4 jf 5
11034 (004) ret #262144
11035 (005) ret #0
11036 ',
11037 }, # carp
11038 {
11039 name => 'icmp',
11040 DLT => 'EN10MB',
11041 aliases => [
11042 'icmp',
11043 'ip proto 1',
11044 ],
11045 unopt => '
11046 (000) ldh [12]
11047 (001) jeq #0x800 jt 2 jf 5
11048 (002) ldb [23]
11049 (003) jeq #0x1 jt 4 jf 5
11050 (004) ret #262144
11051 (005) ret #0
11052 ',
11053 }, # icmp
11054 {
11055 name => 'igmp',
11056 DLT => 'EN10MB',
11057 aliases => [
11058 'igmp',
11059 'ip proto 2',
11060 ],
11061 unopt => '
11062 (000) ldh [12]
11063 (001) jeq #0x800 jt 2 jf 5
11064 (002) ldb [23]
11065 (003) jeq #0x2 jt 4 jf 5
11066 (004) ret #262144
11067 (005) ret #0
11068 ',
11069 }, # igmp
11070 # "igrp" uses IPPROTO_IGRP, which FreeBSD and its derivatives define, but
11071 # other supported OSes don't (thus libpcap uses its own value, which is
11072 # different from FreeBSD). Test each case separately.
11073 # this discrepancy.
11074 {
11075 name => 'igrp_9',
11076 skip => skip_os ('freebsd') || skip_os ('darwin') || skip_os ('dragonfly'),
11077 DLT => 'EN10MB',
11078 aliases => [
11079 'igrp',
11080 'ip proto 9',
11081 ],
11082 unopt => '
11083 (000) ldh [12]
11084 (001) jeq #0x800 jt 2 jf 5
11085 (002) ldb [23]
11086 (003) jeq #0x9 jt 4 jf 5
11087 (004) ret #262144
11088 (005) ret #0
11089 ',
11090 }, # igrp_9
11091 {
11092 name => 'igrp_88',
11093 skip => skip_os_not ('freebsd') && skip_os_not ('darwin') && skip_os_not ('dragonfly'),
11094 DLT => 'EN10MB',
11095 aliases => [
11096 'igrp',
11097 'ip proto 88',
11098 ],
11099 unopt => '
11100 (000) ldh [12]
11101 (001) jeq #0x800 jt 2 jf 5
11102 (002) ldb [23]
11103 (003) jeq #0x58 jt 4 jf 5
11104 (004) ret #262144
11105 (005) ret #0
11106 ',
11107 }, # igrp_88
11108 {
11109 name => 'icmp6',
11110 DLT => 'EN10MB',
11111 aliases => [
11112 'icmp6',
11113 'ip6 proto 58',
11114 ],
11115 opt => '
11116 (000) ldh [12]
11117 (001) jeq #0x86dd jt 2 jf 8
11118 (002) ldb [20]
11119 (003) jeq #0x3a jt 7 jf 4
11120 (004) jeq #0x2c jt 5 jf 8
11121 (005) ldb [54]
11122 (006) jeq #0x3a jt 7 jf 8
11123 (007) ret #262144
11124 (008) ret #0
11125 ',
11126 }, # icmp6
11127 {
11128 name => 'ah',
11129 DLT => 'RAW',
11130 aliases => [
11131 'ah',
11132 'proto 51', # not "proto \ah"
11133 ],
11134 opt => '
11135 (000) ldb [0]
11136 (001) and #0xf0
11137 (002) jeq #0x40 jt 3 jf 5
11138 (003) ldb [9]
11139 (004) jeq #0x33 jt 13 jf 14
11140 (005) ldb [0]
11141 (006) and #0xf0
11142 (007) jeq #0x60 jt 8 jf 14
11143 (008) ldb [6]
11144 (009) jeq #0x33 jt 13 jf 10
11145 (010) jeq #0x2c jt 11 jf 14
11146 (011) ldb [40]
11147 (012) jeq #0x33 jt 13 jf 14
11148 (013) ret #262144
11149 (014) ret #0
11150 ',
11151 }, # ah
11152 {
11153 name => 'esp',
11154 DLT => 'RAW',
11155 aliases => [
11156 'esp',
11157 'proto 50', # not "proto \esp"
11158 ],
11159 opt => '
11160 (000) ldb [0]
11161 (001) and #0xf0
11162 (002) jeq #0x40 jt 3 jf 5
11163 (003) ldb [9]
11164 (004) jeq #0x32 jt 13 jf 14
11165 (005) ldb [0]
11166 (006) and #0xf0
11167 (007) jeq #0x60 jt 8 jf 14
11168 (008) ldb [6]
11169 (009) jeq #0x32 jt 13 jf 10
11170 (010) jeq #0x2c jt 11 jf 14
11171 (011) ldb [40]
11172 (012) jeq #0x32 jt 13 jf 14
11173 (013) ret #262144
11174 (014) ret #0
11175 ',
11176 }, # esp
11177 {
11178 name => 'pim',
11179 DLT => 'RAW',
11180 aliases => [
11181 'pim',
11182 'proto 103', # not "proto \pim"
11183 ],
11184 opt => '
11185 (000) ldb [0]
11186 (001) and #0xf0
11187 (002) jeq #0x40 jt 3 jf 5
11188 (003) ldb [9]
11189 (004) jeq #0x67 jt 13 jf 14
11190 (005) ldb [0]
11191 (006) and #0xf0
11192 (007) jeq #0x60 jt 8 jf 14
11193 (008) ldb [6]
11194 (009) jeq #0x67 jt 13 jf 10
11195 (010) jeq #0x2c jt 11 jf 14
11196 (011) ldb [40]
11197 (012) jeq #0x67 jt 13 jf 14
11198 (013) ret #262144
11199 (014) ret #0
11200 ',
11201 }, # pim
11202 {
11203 name => 'sctp',
11204 DLT => 'RAW',
11205 aliases => [
11206 'sctp',
11207 'proto 132', # not "proto \sctp"
11208 ],
11209 opt => '
11210 (000) ldb [0]
11211 (001) and #0xf0
11212 (002) jeq #0x40 jt 3 jf 5
11213 (003) ldb [9]
11214 (004) jeq #0x84 jt 13 jf 14
11215 (005) ldb [0]
11216 (006) and #0xf0
11217 (007) jeq #0x60 jt 8 jf 14
11218 (008) ldb [6]
11219 (009) jeq #0x84 jt 13 jf 10
11220 (010) jeq #0x2c jt 11 jf 14
11221 (011) ldb [40]
11222 (012) jeq #0x84 jt 13 jf 14
11223 (013) ret #262144
11224 (014) ret #0
11225 ',
11226 }, # sctp
11227 {
11228 name => 'tcp',
11229 DLT => 'RAW',
11230 aliases => [
11231 'tcp',
11232 'proto 6', # not "proto \tcp"
11233 ],
11234 opt => '
11235 (000) ldb [0]
11236 (001) and #0xf0
11237 (002) jeq #0x40 jt 3 jf 5
11238 (003) ldb [9]
11239 (004) jeq #0x6 jt 13 jf 14
11240 (005) ldb [0]
11241 (006) and #0xf0
11242 (007) jeq #0x60 jt 8 jf 14
11243 (008) ldb [6]
11244 (009) jeq #0x6 jt 13 jf 10
11245 (010) jeq #0x2c jt 11 jf 14
11246 (011) ldb [40]
11247 (012) jeq #0x6 jt 13 jf 14
11248 (013) ret #262144
11249 (014) ret #0
11250 ',
11251 }, # tcp
11252 {
11253 name => 'udp',
11254 DLT => 'RAW',
11255 aliases => [
11256 'udp',
11257 'proto 17', # not "proto \udp"
11258 ],
11259 opt => '
11260 (000) ldb [0]
11261 (001) and #0xf0
11262 (002) jeq #0x40 jt 3 jf 5
11263 (003) ldb [9]
11264 (004) jeq #0x11 jt 13 jf 14
11265 (005) ldb [0]
11266 (006) and #0xf0
11267 (007) jeq #0x60 jt 8 jf 14
11268 (008) ldb [6]
11269 (009) jeq #0x11 jt 13 jf 10
11270 (010) jeq #0x2c jt 11 jf 14
11271 (011) ldb [40]
11272 (012) jeq #0x11 jt 13 jf 14
11273 (013) ret #262144
11274 (014) ret #0
11275 ',
11276 }, # udp
11277
11278 {
11279 name => 'ip6_host_addr',
11280 skip => skip_config_undef ('INET6'),
11281 DLT => 'RAW',
11282 aliases => [
11283 'ip6 host ::1',
11284 'ip6 src or dst host ::1',
11285 'ip6 src or dst ::1',
11286 'host ::1',
11287 'src or dst host ::1',
11288 'src or dst ::1',
11289 'ip6 net ::1/128',
11290 'ip6 src or dst net ::1/128',
11291 'net ::1/128',
11292 'src or dst net ::1/128',
11293 # "...so in this primitive IPv6 "network" matches are really always
11294 # host matches"
11295 'ip6 net ::1',
11296 'ip6 src or dst net ::1',
11297 'net ::1',
11298 'src or dst net ::1',
11299 # This syntax is not documented and seems to be an unintended edge case
11300 # in the invocation of gen_mcode6() from the grammar. It may become
11301 # invalid syntax later, in which case the aliases below will need to be
11302 # converted to reject tests.
11303 'ip6 host ::1/128',
11304 'ip6 src or dst host ::1/128',
11305 'ip6 src or dst ::1/128',
11306 'host ::1/128',
11307 'src or dst host ::1/128',
11308 'src or dst ::1/128',
11309 ],
11310 opt => '
11311 (000) ldb [0]
11312 (001) and #0xf0
11313 (002) jeq #0x60 jt 3 jf 20
11314 (003) ld [8]
11315 (004) jeq #0x0 jt 5 jf 11
11316 (005) ld [12]
11317 (006) jeq #0x0 jt 7 jf 11
11318 (007) ld [16]
11319 (008) jeq #0x0 jt 9 jf 11
11320 (009) ld [20]
11321 (010) jeq #0x1 jt 19 jf 11
11322 (011) ld [24]
11323 (012) jeq #0x0 jt 13 jf 20
11324 (013) ld [28]
11325 (014) jeq #0x0 jt 15 jf 20
11326 (015) ld [32]
11327 (016) jeq #0x0 jt 17 jf 20
11328 (017) ld [36]
11329 (018) jeq #0x1 jt 19 jf 20
11330 (019) ret #262144
11331 (020) ret #0
11332 ',
11333 }, # ip6_host_addr
11334 {
11335 name => 'ip6_host_name',
11336 skip => skip_config_undef ('INET6') || skip_no_hosts(),
11337 DLT => 'RAW',
11338 aliases => [
11339 'ip6 host noeth-noipv4-ipv6.host123.libpcap.test',
11340 'ip6 host noeth-ipv4-ipv6.host123.libpcap.test',
11341 'ip6 src or dst noeth-noipv4-ipv6.host123.libpcap.test',
11342 'ip6 src or dst noeth-ipv4-ipv6.host123.libpcap.test',
11343 'ip6 src or dst host noeth-noipv4-ipv6.host123.libpcap.test',
11344 'ip6 src or dst host noeth-ipv4-ipv6.host123.libpcap.test',
11345 'host noeth-noipv4-ipv6.host123.libpcap.test',
11346 'src or dst host noeth-noipv4-ipv6.host123.libpcap.test',
11347 'src or dst noeth-noipv4-ipv6.host123.libpcap.test',
11348 ],
11349 opt => '
11350 (000) ldb [0]
11351 (001) and #0xf0
11352 (002) jeq #0x60 jt 3 jf 20
11353 (003) ld [8]
11354 (004) jeq #0xfd00a1b2 jt 5 jf 11
11355 (005) ld [12]
11356 (006) jeq #0xc3d40000 jt 7 jf 11
11357 (007) ld [16]
11358 (008) jeq #0x10203040 jt 9 jf 11
11359 (009) ld [20]
11360 (010) jeq #0x50607080 jt 19 jf 11
11361 (011) ld [24]
11362 (012) jeq #0xfd00a1b2 jt 13 jf 20
11363 (013) ld [28]
11364 (014) jeq #0xc3d40000 jt 15 jf 20
11365 (015) ld [32]
11366 (016) jeq #0x10203040 jt 17 jf 20
11367 (017) ld [36]
11368 (018) jeq #0x50607080 jt 19 jf 20
11369 (019) ret #262144
11370 (020) ret #0
11371 ',
11372 }, # ip6_host_name
11373 {
11374 name => 'ip6_host_NAME',
11375 skip => skip_config_undef ('INET6') || skip_no_hosts_casecmp(),
11376 DLT => 'RAW',
11377 aliases => [
11378 'ip6 host NOETH-NOIPV4-IPV6.HOST123.LIBPCAP.TEST',
11379 'ip6 host NOETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
11380 'ip6 src or dst NOETH-NOIPV4-IPV6.HOST123.LIBPCAP.TEST',
11381 'ip6 src or dst NOETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
11382 'ip6 src or dst host NOETH-NOIPV4-IPV6.HOST123.LIBPCAP.TEST',
11383 'ip6 src or dst host NOETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
11384 'host NOETH-NOIPV4-IPV6.HOST123.LIBPCAP.TEST',
11385 'src or dst host NOETH-NOIPV4-IPV6.HOST123.LIBPCAP.TEST',
11386 'src or dst NOETH-NOIPV4-IPV6.HOST123.LIBPCAP.TEST',
11387 ],
11388 opt => '
11389 (000) ldb [0]
11390 (001) and #0xf0
11391 (002) jeq #0x60 jt 3 jf 20
11392 (003) ld [8]
11393 (004) jeq #0xfd00a1b2 jt 5 jf 11
11394 (005) ld [12]
11395 (006) jeq #0xc3d40000 jt 7 jf 11
11396 (007) ld [16]
11397 (008) jeq #0x10203040 jt 9 jf 11
11398 (009) ld [20]
11399 (010) jeq #0x50607080 jt 19 jf 11
11400 (011) ld [24]
11401 (012) jeq #0xfd00a1b2 jt 13 jf 20
11402 (013) ld [28]
11403 (014) jeq #0xc3d40000 jt 15 jf 20
11404 (015) ld [32]
11405 (016) jeq #0x10203040 jt 17 jf 20
11406 (017) ld [36]
11407 (018) jeq #0x50607080 jt 19 jf 20
11408 (019) ret #262144
11409 (020) ret #0
11410 ',
11411 }, # ip6_host_NAME
11412 {
11413 name => 'ip6_src_host_addr',
11414 skip => skip_config_undef ('INET6'),
11415 DLT => 'RAW',
11416 aliases => [
11417 'ip6 src host fe80::1122:33ff:fe44:5566',
11418 'ip6 src fe80::1122:33ff:fe44:5566',
11419 'src host fe80::1122:33ff:fe44:5566',
11420 'src fe80::1122:33ff:fe44:5566',
11421 # same as above
11422 'ip6 src host fe80::1122:33ff:fe44:5566/128',
11423 'ip6 src fe80::1122:33ff:fe44:5566/128',
11424 'src host fe80::1122:33ff:fe44:5566/128',
11425 'src fe80::1122:33ff:fe44:5566/128',
11426 ],
11427 opt => '
11428 (000) ldb [0]
11429 (001) and #0xf0
11430 (002) jeq #0x60 jt 3 jf 12
11431 (003) ld [8]
11432 (004) jeq #0xfe800000 jt 5 jf 12
11433 (005) ld [12]
11434 (006) jeq #0x0 jt 7 jf 12
11435 (007) ld [16]
11436 (008) jeq #0x112233ff jt 9 jf 12
11437 (009) ld [20]
11438 (010) jeq #0xfe445566 jt 11 jf 12
11439 (011) ret #262144
11440 (012) ret #0
11441 ',
11442 }, # ip6_src_host_addr
11443 {
11444 name => 'ip6_src_host_name',
11445 skip => skip_config_undef ('INET6') || skip_no_hosts(),
11446 DLT => 'RAW',
11447 aliases => [
11448 'ip6 src host noeth-noipv4-ipv6.host123.libpcap.test',
11449 'ip6 src host noeth-ipv4-ipv6.host123.libpcap.test',
11450 'ip6 src noeth-noipv4-ipv6.host123.libpcap.test',
11451 'ip6 src noeth-ipv4-ipv6.host123.libpcap.test',
11452 'src host noeth-noipv4-ipv6.host123.libpcap.test',
11453 'src noeth-noipv4-ipv6.host123.libpcap.test',
11454 ],
11455 opt => '
11456 (000) ldb [0]
11457 (001) and #0xf0
11458 (002) jeq #0x60 jt 3 jf 12
11459 (003) ld [8]
11460 (004) jeq #0xfd00a1b2 jt 5 jf 12
11461 (005) ld [12]
11462 (006) jeq #0xc3d40000 jt 7 jf 12
11463 (007) ld [16]
11464 (008) jeq #0x10203040 jt 9 jf 12
11465 (009) ld [20]
11466 (010) jeq #0x50607080 jt 11 jf 12
11467 (011) ret #262144
11468 (012) ret #0
11469 ',
11470 }, # ip6_src_host_name
11471 {
11472 name => 'ip6_src_host_NAME',
11473 skip => skip_config_undef ('INET6') || skip_no_hosts_casecmp(),
11474 DLT => 'RAW',
11475 aliases => [
11476 'ip6 src host NOETH-NOIPV4-IPV6.HOST123.LIBPCAP.TEST',
11477 'ip6 src host NOETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
11478 'ip6 src NOETH-NOIPV4-IPV6.HOST123.LIBPCAP.TEST',
11479 'ip6 src NOETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
11480 'src host NOETH-NOIPV4-IPV6.HOST123.LIBPCAP.TEST',
11481 'src NOETH-NOIPV4-IPV6.HOST123.LIBPCAP.TEST',
11482 ],
11483 opt => '
11484 (000) ldb [0]
11485 (001) and #0xf0
11486 (002) jeq #0x60 jt 3 jf 12
11487 (003) ld [8]
11488 (004) jeq #0xfd00a1b2 jt 5 jf 12
11489 (005) ld [12]
11490 (006) jeq #0xc3d40000 jt 7 jf 12
11491 (007) ld [16]
11492 (008) jeq #0x10203040 jt 9 jf 12
11493 (009) ld [20]
11494 (010) jeq #0x50607080 jt 11 jf 12
11495 (011) ret #262144
11496 (012) ret #0
11497 ',
11498 }, # ip6_src_host_NAME
11499 {
11500 name => 'ip6_dst_host_addr',
11501 skip => skip_config_undef ('INET6'),
11502 DLT => 'RAW',
11503 aliases => [
11504 'ip6 dst host fe80::7788:99ff:feaa:bbcc',
11505 'ip6 dst fe80::7788:99ff:feaa:bbcc',
11506 'dst host fe80::7788:99ff:feaa:bbcc',
11507 'dst fe80::7788:99ff:feaa:bbcc',
11508 # same as above
11509 'ip6 dst host fe80::7788:99ff:feaa:bbcc/128',
11510 'ip6 dst fe80::7788:99ff:feaa:bbcc/128',
11511 'dst host fe80::7788:99ff:feaa:bbcc/128',
11512 'dst fe80::7788:99ff:feaa:bbcc/128',
11513 ],
11514 opt => '
11515 (000) ldb [0]
11516 (001) and #0xf0
11517 (002) jeq #0x60 jt 3 jf 12
11518 (003) ld [24]
11519 (004) jeq #0xfe800000 jt 5 jf 12
11520 (005) ld [28]
11521 (006) jeq #0x0 jt 7 jf 12
11522 (007) ld [32]
11523 (008) jeq #0x778899ff jt 9 jf 12
11524 (009) ld [36]
11525 (010) jeq #0xfeaabbcc jt 11 jf 12
11526 (011) ret #262144
11527 (012) ret #0
11528 ',
11529 }, # ip6_dst_host_addr
11530 {
11531 name => 'ip6_dst_host_name',
11532 skip => skip_config_undef ('INET6') || skip_no_hosts(),
11533 DLT => 'RAW',
11534 aliases => [
11535 'ip6 dst host noeth-noipv4-ipv6.host123.libpcap.test',
11536 'ip6 dst host noeth-ipv4-ipv6.host123.libpcap.test',
11537 'ip6 dst noeth-noipv4-ipv6.host123.libpcap.test',
11538 'ip6 dst noeth-ipv4-ipv6.host123.libpcap.test',
11539 'dst host noeth-noipv4-ipv6.host123.libpcap.test',
11540 'dst noeth-noipv4-ipv6.host123.libpcap.test',
11541 ],
11542 opt => '
11543 (000) ldb [0]
11544 (001) and #0xf0
11545 (002) jeq #0x60 jt 3 jf 12
11546 (003) ld [24]
11547 (004) jeq #0xfd00a1b2 jt 5 jf 12
11548 (005) ld [28]
11549 (006) jeq #0xc3d40000 jt 7 jf 12
11550 (007) ld [32]
11551 (008) jeq #0x10203040 jt 9 jf 12
11552 (009) ld [36]
11553 (010) jeq #0x50607080 jt 11 jf 12
11554 (011) ret #262144
11555 (012) ret #0
11556 ',
11557 }, # ip6_dst_host_name
11558 {
11559 name => 'ip6_dst_host_NAME',
11560 skip => skip_config_undef ('INET6') || skip_no_hosts_casecmp(),
11561 DLT => 'RAW',
11562 aliases => [
11563 'ip6 dst host NOETH-NOIPV4-IPV6.HOST123.LIBPCAP.TEST',
11564 'ip6 dst host NOETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
11565 'ip6 dst NOETH-NOIPV4-IPV6.HOST123.LIBPCAP.TEST',
11566 'ip6 dst NOETH-IPV4-IPV6.HOST123.LIBPCAP.TEST',
11567 'dst host NOETH-NOIPV4-IPV6.HOST123.LIBPCAP.TEST',
11568 'dst NOETH-NOIPV4-IPV6.HOST123.LIBPCAP.TEST',
11569 ],
11570 opt => '
11571 (000) ldb [0]
11572 (001) and #0xf0
11573 (002) jeq #0x60 jt 3 jf 12
11574 (003) ld [24]
11575 (004) jeq #0xfd00a1b2 jt 5 jf 12
11576 (005) ld [28]
11577 (006) jeq #0xc3d40000 jt 7 jf 12
11578 (007) ld [32]
11579 (008) jeq #0x10203040 jt 9 jf 12
11580 (009) ld [36]
11581 (010) jeq #0x50607080 jt 11 jf 12
11582 (011) ret #262144
11583 (012) ret #0
11584 ',
11585 }, # ip6_dst_host_NAME
11586 {
11587 name => 'ip6_net',
11588 skip => skip_config_undef ('INET6'),
11589 DLT => 'RAW',
11590 aliases => [
11591 'ip6 net fe80::/10',
11592 'net fe80::/10',
11593 'src or dst net fe80::/10',
11594 'ip6 src or dst net fe80::/10',
11595 ],
11596 opt => '
11597 (000) ldb [0]
11598 (001) and #0xf0
11599 (002) jeq #0x60 jt 3 jf 10
11600 (003) ld [8]
11601 (004) and #0xffc00000
11602 (005) jeq #0xfe800000 jt 9 jf 6
11603 (006) ld [24]
11604 (007) and #0xffc00000
11605 (008) jeq #0xfe800000 jt 9 jf 10
11606 (009) ret #262144
11607 (010) ret #0
11608 ',
11609 }, # ip6_net
11610 {
11611 name => 'ip6_src_net',
11612 skip => skip_config_undef ('INET6'),
11613 DLT => 'RAW',
11614 aliases => [
11615 'ip6 src net 2000::/3',
11616 'src net 2000::/3',
11617 ],
11618 opt => '
11619 (000) ldb [0]
11620 (001) and #0xf0
11621 (002) jeq #0x60 jt 3 jf 7
11622 (003) ld [8]
11623 (004) and #0xe0000000
11624 (005) jeq #0x20000000 jt 6 jf 7
11625 (006) ret #262144
11626 (007) ret #0
11627 ',
11628 }, # ip6_src_net
11629 {
11630 name => 'ip6_dst_net_0',
11631 skip => skip_config_undef ('INET6'),
11632 DLT => 'RAW',
11633 aliases => ['ip6 dst net ::/0'],
11634 unopt => '
11635 (000) ldb [0]
11636 (001) and #0xf0
11637 (002) jeq #0x60 jt 3 jf 4
11638 (003) ret #262144
11639 (004) ret #0
11640 ',
11641 }, # ip6_dst_net_0
11642 {
11643 name => 'ip6_dst_net_8',
11644 skip => skip_config_undef ('INET6'),
11645 DLT => 'RAW',
11646 aliases => ['ip6 dst net ff00::/8'],
11647 unopt => '
11648 (000) ldb [0]
11649 (001) and #0xf0
11650 (002) jeq #0x60 jt 3 jf 7
11651 (003) ld [24]
11652 (004) and #0xff000000
11653 (005) jeq #0xff000000 jt 6 jf 7
11654 (006) ret #262144
11655 (007) ret #0
11656 ',
11657 }, # ip6_dst_net_8
11658 {
11659 name => 'ip6_dst_net_40',
11660 skip => skip_config_undef ('INET6'),
11661 DLT => 'RAW',
11662 aliases => ['ip6 dst net ff11:2233:4400::/40'],
11663 unopt => '
11664 (000) ldb [0]
11665 (001) and #0xf0
11666 (002) jeq #0x60 jt 3 jf 9
11667 (003) ld [24]
11668 (004) jeq #0xff112233 jt 5 jf 9
11669 (005) ld [28]
11670 (006) and #0xff000000
11671 (007) jeq #0x44000000 jt 8 jf 9
11672 (008) ret #262144
11673 (009) ret #0
11674 ',
11675 }, # ip6_dst_net_40
11676 {
11677 name => 'ip6_dst_net_80',
11678 skip => skip_config_undef ('INET6'),
11679 DLT => 'RAW',
11680 aliases => ['ip6 dst net ff11:2233:4455:6677:8899::/80'],
11681 unopt => '
11682 (000) ldb [0]
11683 (001) and #0xf0
11684 (002) jeq #0x60 jt 3 jf 11
11685 (003) ld [24]
11686 (004) jeq #0xff112233 jt 5 jf 11
11687 (005) ld [28]
11688 (006) jeq #0x44556677 jt 7 jf 11
11689 (007) ld [32]
11690 (008) and #0xffff0000
11691 (009) jeq #0x88990000 jt 10 jf 11
11692 (010) ret #262144
11693 (011) ret #0
11694 ',
11695 }, # ip6_dst_net_80
11696 {
11697 name => 'ip6_dst_net_120',
11698 skip => skip_config_undef ('INET6'),
11699 DLT => 'RAW',
11700 aliases => ['ip6 dst net ff11:2233:4455:6677:8899:aabb:ccdd:ee00/120'],
11701 unopt => '
11702 (000) ldb [0]
11703 (001) and #0xf0
11704 (002) jeq #0x60 jt 3 jf 13
11705 (003) ld [24]
11706 (004) jeq #0xff112233 jt 5 jf 13
11707 (005) ld [28]
11708 (006) jeq #0x44556677 jt 7 jf 13
11709 (007) ld [32]
11710 (008) jeq #0x8899aabb jt 9 jf 13
11711 (009) ld [36]
11712 (010) and #0xffffff00
11713 (011) jeq #0xccddee00 jt 12 jf 13
11714 (012) ret #262144
11715 (013) ret #0
11716 ',
11717 }, # ip6_dst_net_120
11718 {
11719 name => 'ip6_multicast',
11720 DLT => 'IPV6',
11721 aliases => ['ip6 multicast'],
11722 unopt => '
11723 (000) ld #0x0
11724 (001) jeq #0x0 jt 2 jf 5
11725 (002) ldb [24]
11726 (003) jeq #0xff jt 4 jf 5
11727 (004) ret #262144
11728 (005) ret #0
11729 ',
11730 }, # ip6_multicast
11731
11732 {
11733 name => 'icmp_types',
11734 DLT => 'EN10MB',
11735 aliases => ['
11736 0 == icmp-echoreply &&
11737 3 == icmp-unreach &&
11738 4 == icmp-sourcequench &&
11739 5 == icmp-redirect &&
11740 8 == icmp-echo &&
11741 9 == icmp-routeradvert &&
11742 10 == icmp-routersolicit &&
11743 11 == icmp-timxceed &&
11744 12 == icmp-paramprob &&
11745 13 == icmp-tstamp &&
11746 14 == icmp-tstampreply &&
11747 15 == icmp-ireq &&
11748 16 == icmp-ireqreply &&
11749 17 == icmp-maskreq &&
11750 18 == icmp-maskreply
11751 '],
11752 opt => '
11753 (000) ret #262144
11754 ',
11755 }, # icmp_types
11756 {
11757 name => 'icmp6_types',
11758 DLT => 'IPV6',
11759 aliases => ['
11760 1 == icmp6-destinationunreach &&
11761 2 == icmp6-packettoobig &&
11762 3 == icmp6-timeexceeded &&
11763 4 == icmp6-parameterproblem &&
11764 128 == icmp6-echo &&
11765 129 == icmp6-echoreply &&
11766 130 == icmp6-multicastlistenerquery &&
11767 131 == icmp6-multicastlistenerreportv1 &&
11768 132 == icmp6-multicastlistenerdone &&
11769 133 == icmp6-routersolicit &&
11770 134 == icmp6-routeradvert &&
11771 135 == icmp6-neighborsolicit &&
11772 136 == icmp6-neighboradvert &&
11773 137 == icmp6-redirect &&
11774 138 == icmp6-routerrenum &&
11775 139 == icmp6-nodeinformationquery &&
11776 140 == icmp6-nodeinformationresponse &&
11777 141 == icmp6-ineighbordiscoverysolicit &&
11778 142 == icmp6-ineighbordiscoveryadvert &&
11779 143 == icmp6-multicastlistenerreportv2 &&
11780 144 == icmp6-homeagentdiscoveryrequest &&
11781 145 == icmp6-homeagentdiscoveryreply &&
11782 146 == icmp6-mobileprefixsolicit &&
11783 147 == icmp6-mobileprefixadvert &&
11784 148 == icmp6-certpathsolicit &&
11785 149 == icmp6-certpathadvert &&
11786 151 == icmp6-multicastrouteradvert &&
11787 152 == icmp6-multicastroutersolicit &&
11788 153 == icmp6-multicastrouterterm
11789 '],
11790 opt => '
11791 (000) ret #262144
11792 ',
11793 }, # icmp6_types
11794
11795 {
11796 name => 'tcp_flags',
11797 DLT => 'EN10MB',
11798 aliases => ['
11799 0x01 == tcp-fin &&
11800 0x02 == tcp-syn &&
11801 0x04 == tcp-rst &&
11802 0x08 == tcp-push &&
11803 0x10 == tcp-ack &&
11804 0x20 == tcp-urg &&
11805 0x40 == tcp-ece &&
11806 0x80 == tcp-cwr
11807 '],
11808 opt => '
11809 (000) ret #262144
11810 ',
11811 }, # tcp_flags
11812
11813 {
11814 name => 'named_offsets',
11815 DLT => 'EN10MB',
11816 aliases => ['
11817 icmptype == 0 &&
11818 icmpcode == 1 &&
11819 icmp6type == 0 &&
11820 icmp6code == 1 &&
11821 tcpflags == 13
11822 '],
11823 opt => '
11824 (000) ret #262144
11825 ',
11826 }, # offsets
11827
11828 # In the tests below "smtp" depends on getaddrinfo().
11829 {
11830 name => 'tcp_port',
11831 DLT => 'EN10MB',
11832 aliases => [
11833 'tcp port 25',
11834 'tcp port smtp',
11835 'tcp src or dst port 25',
11836 'tcp src or dst port smtp',
11837 # degenerate "portrange"
11838 'tcp portrange 25-25',
11839 'tcp portrange 25-smtp',
11840 'tcp portrange smtp-25',
11841 'tcp portrange smtp-smtp',
11842 'tcp portrange 25',
11843 # "25" is a valid port range, but "smtp" is not.
11844 'tcp src or dst portrange 25-25',
11845 'tcp src or dst portrange 25-smtp',
11846 'tcp src or dst portrange smtp-25',
11847 'tcp src or dst portrange smtp-smtp',
11848 'tcp src or dst portrange 25',
11849 ],
11850 opt => '
11851 (000) ldh [12]
11852 (001) jeq #0x86dd jt 2 jf 8
11853 (002) ldb [20]
11854 (003) jeq #0x6 jt 4 jf 19
11855 (004) ldh [54]
11856 (005) jeq #0x19 jt 18 jf 6
11857 (006) ldh [56]
11858 (007) jeq #0x19 jt 18 jf 19
11859 (008) jeq #0x800 jt 9 jf 19
11860 (009) ldb [23]
11861 (010) jeq #0x6 jt 11 jf 19
11862 (011) ldh [20]
11863 (012) jset #0x1fff jt 19 jf 13
11864 (013) ldxb 4*([14]&0xf)
11865 (014) ldh [x + 14]
11866 (015) jeq #0x19 jt 18 jf 16
11867 (016) ldh [x + 16]
11868 (017) jeq #0x19 jt 18 jf 19
11869 (018) ret #262144
11870 (019) ret #0
11871 ',
11872 unopt => '
11873 (000) ldh [12]
11874 (001) jeq #0x86dd jt 2 jf 8
11875 (002) ldb [20]
11876 (003) jeq #0x6 jt 4 jf 8
11877 (004) ldh [54]
11878 (005) jeq #0x19 jt 20 jf 6
11879 (006) ldh [56]
11880 (007) jeq #0x19 jt 20 jf 8
11881 (008) ldh [12]
11882 (009) jeq #0x800 jt 10 jf 21
11883 (010) ldb [23]
11884 (011) jeq #0x6 jt 12 jf 21
11885 (012) ldh [20]
11886 (013) jset #0x1fff jt 21 jf 14
11887 (014) ldxb 4*([14]&0xf)
11888 (015) ldh [x + 14]
11889 (016) jeq #0x19 jt 20 jf 17
11890 (017) ldxb 4*([14]&0xf)
11891 (018) ldh [x + 16]
11892 (019) jeq #0x19 jt 20 jf 21
11893 (020) ret #262144
11894 (021) ret #0
11895 ',
11896 }, # tcp_port
11897 {
11898 name => 'tcp_src_port',
11899 DLT => 'EN10MB',
11900 aliases => [
11901 'tcp src port 25',
11902 'tcp src port smtp',
11903 # degenerate "src portrange"
11904 'tcp src portrange 25-25',
11905 'tcp src portrange 25-smtp',
11906 'tcp src portrange smtp-25',
11907 'tcp src portrange smtp-smtp',
11908 'tcp src portrange 25',
11909 ],
11910 opt => '
11911 (000) ldh [12]
11912 (001) jeq #0x86dd jt 2 jf 6
11913 (002) ldb [20]
11914 (003) jeq #0x6 jt 4 jf 15
11915 (004) ldh [54]
11916 (005) jeq #0x19 jt 14 jf 15
11917 (006) jeq #0x800 jt 7 jf 15
11918 (007) ldb [23]
11919 (008) jeq #0x6 jt 9 jf 15
11920 (009) ldh [20]
11921 (010) jset #0x1fff jt 15 jf 11
11922 (011) ldxb 4*([14]&0xf)
11923 (012) ldh [x + 14]
11924 (013) jeq #0x19 jt 14 jf 15
11925 (014) ret #262144
11926 (015) ret #0
11927 ',
11928 unopt => '
11929 (000) ldh [12]
11930 (001) jeq #0x86dd jt 2 jf 6
11931 (002) ldb [20]
11932 (003) jeq #0x6 jt 4 jf 6
11933 (004) ldh [54]
11934 (005) jeq #0x19 jt 15 jf 6
11935 (006) ldh [12]
11936 (007) jeq #0x800 jt 8 jf 16
11937 (008) ldb [23]
11938 (009) jeq #0x6 jt 10 jf 16
11939 (010) ldh [20]
11940 (011) jset #0x1fff jt 16 jf 12
11941 (012) ldxb 4*([14]&0xf)
11942 (013) ldh [x + 14]
11943 (014) jeq #0x19 jt 15 jf 16
11944 (015) ret #262144
11945 (016) ret #0
11946 ',
11947 }, # tcp_src_port
11948 {
11949 name => 'tcp_dst_port',
11950 DLT => 'EN10MB',
11951 aliases => [
11952 'tcp dst port 25',
11953 'tcp dst port smtp',
11954 # degenerate "dst portrange"
11955 'tcp dst portrange 25-25',
11956 'tcp dst portrange 25-smtp',
11957 'tcp dst portrange smtp-25',
11958 'tcp dst portrange smtp-smtp',
11959 'tcp dst portrange 25',
11960 ],
11961 opt => '
11962 (000) ldh [12]
11963 (001) jeq #0x86dd jt 2 jf 6
11964 (002) ldb [20]
11965 (003) jeq #0x6 jt 4 jf 15
11966 (004) ldh [56]
11967 (005) jeq #0x19 jt 14 jf 15
11968 (006) jeq #0x800 jt 7 jf 15
11969 (007) ldb [23]
11970 (008) jeq #0x6 jt 9 jf 15
11971 (009) ldh [20]
11972 (010) jset #0x1fff jt 15 jf 11
11973 (011) ldxb 4*([14]&0xf)
11974 (012) ldh [x + 16]
11975 (013) jeq #0x19 jt 14 jf 15
11976 (014) ret #262144
11977 (015) ret #0
11978 ',
11979 unopt => '
11980 (000) ldh [12]
11981 (001) jeq #0x86dd jt 2 jf 6
11982 (002) ldb [20]
11983 (003) jeq #0x6 jt 4 jf 6
11984 (004) ldh [56]
11985 (005) jeq #0x19 jt 15 jf 6
11986 (006) ldh [12]
11987 (007) jeq #0x800 jt 8 jf 16
11988 (008) ldb [23]
11989 (009) jeq #0x6 jt 10 jf 16
11990 (010) ldh [20]
11991 (011) jset #0x1fff jt 16 jf 12
11992 (012) ldxb 4*([14]&0xf)
11993 (013) ldh [x + 16]
11994 (014) jeq #0x19 jt 15 jf 16
11995 (015) ret #262144
11996 (016) ret #0
11997 ',
11998 }, # tcp_dst_port
11999 {
12000 name => 'tcp_portrange',
12001 DLT => 'EN10MB',
12002 aliases => [
12003 'tcp portrange 25-53',
12004 'tcp portrange 25-domain',
12005 'tcp portrange smtp-53',
12006 'tcp portrange smtp-domain',
12007 'tcp portrange 53-25',
12008 'tcp portrange domain-25',
12009 'tcp portrange 53-smtp',
12010 'tcp portrange domain-smtp',
12011 'tcp src or dst portrange 25-53',
12012 'tcp src or dst portrange 25-domain',
12013 'tcp src or dst portrange smtp-53',
12014 'tcp src or dst portrange smtp-domain',
12015 'tcp src or dst portrange 53-25',
12016 'tcp src or dst portrange domain-25',
12017 'tcp src or dst portrange 53-smtp',
12018 'tcp src or dst portrange domain-smtp',
12019 ],
12020 opt => '
12021 (000) ldh [12]
12022 (001) jeq #0x86dd jt 2 jf 9
12023 (002) ldb [20]
12024 (003) jeq #0x6 jt 4 jf 22
12025 (004) ldh [54]
12026 (005) jge #0x19 jt 6 jf 7
12027 (006) jgt #0x35 jt 7 jf 21
12028 (007) ldh [56]
12029 (008) jge #0x19 jt 20 jf 22
12030 (009) jeq #0x800 jt 10 jf 22
12031 (010) ldb [23]
12032 (011) jeq #0x6 jt 12 jf 22
12033 (012) ldh [20]
12034 (013) jset #0x1fff jt 22 jf 14
12035 (014) ldxb 4*([14]&0xf)
12036 (015) ldh [x + 14]
12037 (016) jge #0x19 jt 17 jf 18
12038 (017) jgt #0x35 jt 18 jf 21
12039 (018) ldh [x + 16]
12040 (019) jge #0x19 jt 20 jf 22
12041 (020) jgt #0x35 jt 22 jf 21
12042 (021) ret #262144
12043 (022) ret #0
12044 ',
12045 unopt => '
12046 (000) ldh [12]
12047 (001) jeq #0x86dd jt 2 jf 12
12048 (002) ldb [20]
12049 (003) jeq #0x6 jt 4 jf 12
12050 (004) ldh [54]
12051 (005) jge #0x19 jt 6 jf 8
12052 (006) ldh [54]
12053 (007) jgt #0x35 jt 8 jf 30
12054 (008) ldh [56]
12055 (009) jge #0x19 jt 10 jf 12
12056 (010) ldh [56]
12057 (011) jgt #0x35 jt 12 jf 30
12058 (012) ldh [12]
12059 (013) jeq #0x800 jt 14 jf 31
12060 (014) ldb [23]
12061 (015) jeq #0x6 jt 16 jf 31
12062 (016) ldh [20]
12063 (017) jset #0x1fff jt 31 jf 18
12064 (018) ldxb 4*([14]&0xf)
12065 (019) ldh [x + 14]
12066 (020) jge #0x19 jt 21 jf 24
12067 (021) ldxb 4*([14]&0xf)
12068 (022) ldh [x + 14]
12069 (023) jgt #0x35 jt 24 jf 30
12070 (024) ldxb 4*([14]&0xf)
12071 (025) ldh [x + 16]
12072 (026) jge #0x19 jt 27 jf 31
12073 (027) ldxb 4*([14]&0xf)
12074 (028) ldh [x + 16]
12075 (029) jgt #0x35 jt 31 jf 30
12076 (030) ret #262144
12077 (031) ret #0
12078 ',
12079 }, # tcp_portrange
12080 {
12081 name => 'tcp_src_portrange',
12082 DLT => 'EN10MB',
12083 aliases => [
12084 'tcp src portrange 25-53',
12085 'tcp src portrange 25-domain',
12086 'tcp src portrange smtp-53',
12087 'tcp src portrange smtp-domain',
12088 'tcp src portrange 53-25',
12089 'tcp src portrange domain-25',
12090 'tcp src portrange 53-smtp',
12091 'tcp src portrange domain-smtp',
12092 ],
12093 opt => '
12094 (000) ldh [12]
12095 (001) jeq #0x86dd jt 2 jf 6
12096 (002) ldb [20]
12097 (003) jeq #0x6 jt 4 jf 16
12098 (004) ldh [54]
12099 (005) jge #0x19 jt 14 jf 16
12100 (006) jeq #0x800 jt 7 jf 16
12101 (007) ldb [23]
12102 (008) jeq #0x6 jt 9 jf 16
12103 (009) ldh [20]
12104 (010) jset #0x1fff jt 16 jf 11
12105 (011) ldxb 4*([14]&0xf)
12106 (012) ldh [x + 14]
12107 (013) jge #0x19 jt 14 jf 16
12108 (014) jgt #0x35 jt 16 jf 15
12109 (015) ret #262144
12110 (016) ret #0
12111 ',
12112 unopt => '
12113 (000) ldh [12]
12114 (001) jeq #0x86dd jt 2 jf 8
12115 (002) ldb [20]
12116 (003) jeq #0x6 jt 4 jf 8
12117 (004) ldh [54]
12118 (005) jge #0x19 jt 6 jf 8
12119 (006) ldh [54]
12120 (007) jgt #0x35 jt 8 jf 20
12121 (008) ldh [12]
12122 (009) jeq #0x800 jt 10 jf 21
12123 (010) ldb [23]
12124 (011) jeq #0x6 jt 12 jf 21
12125 (012) ldh [20]
12126 (013) jset #0x1fff jt 21 jf 14
12127 (014) ldxb 4*([14]&0xf)
12128 (015) ldh [x + 14]
12129 (016) jge #0x19 jt 17 jf 21
12130 (017) ldxb 4*([14]&0xf)
12131 (018) ldh [x + 14]
12132 (019) jgt #0x35 jt 21 jf 20
12133 (020) ret #262144
12134 (021) ret #0
12135 ',
12136 }, # tcp_src_portrange
12137 {
12138 name => 'tcp_dst_portrange',
12139 DLT => 'EN10MB',
12140 aliases => [
12141 'tcp dst portrange 25-53',
12142 'tcp dst portrange 25-domain',
12143 'tcp dst portrange smtp-53',
12144 'tcp dst portrange smtp-domain',
12145 'tcp dst portrange 53-25',
12146 'tcp dst portrange domain-25',
12147 'tcp dst portrange 53-smtp',
12148 'tcp dst portrange domain-smtp',
12149 ],
12150 opt => '
12151 (000) ldh [12]
12152 (001) jeq #0x86dd jt 2 jf 6
12153 (002) ldb [20]
12154 (003) jeq #0x6 jt 4 jf 16
12155 (004) ldh [56]
12156 (005) jge #0x19 jt 14 jf 16
12157 (006) jeq #0x800 jt 7 jf 16
12158 (007) ldb [23]
12159 (008) jeq #0x6 jt 9 jf 16
12160 (009) ldh [20]
12161 (010) jset #0x1fff jt 16 jf 11
12162 (011) ldxb 4*([14]&0xf)
12163 (012) ldh [x + 16]
12164 (013) jge #0x19 jt 14 jf 16
12165 (014) jgt #0x35 jt 16 jf 15
12166 (015) ret #262144
12167 (016) ret #0
12168 ',
12169 unopt => '
12170 (000) ldh [12]
12171 (001) jeq #0x86dd jt 2 jf 8
12172 (002) ldb [20]
12173 (003) jeq #0x6 jt 4 jf 8
12174 (004) ldh [56]
12175 (005) jge #0x19 jt 6 jf 8
12176 (006) ldh [56]
12177 (007) jgt #0x35 jt 8 jf 20
12178 (008) ldh [12]
12179 (009) jeq #0x800 jt 10 jf 21
12180 (010) ldb [23]
12181 (011) jeq #0x6 jt 12 jf 21
12182 (012) ldh [20]
12183 (013) jset #0x1fff jt 21 jf 14
12184 (014) ldxb 4*([14]&0xf)
12185 (015) ldh [x + 16]
12186 (016) jge #0x19 jt 17 jf 21
12187 (017) ldxb 4*([14]&0xf)
12188 (018) ldh [x + 16]
12189 (019) jgt #0x35 jt 21 jf 20
12190 (020) ret #262144
12191 (021) ret #0
12192 ',
12193 }, # tcp_dst_portrange
12194 # In the tests below "domain" depends on getaddrinfo().
12195 {
12196 name => 'udp_port',
12197 DLT => 'EN10MB',
12198 aliases => [
12199 'udp port 53',
12200 'udp port domain',
12201 'udp src or dst port 53',
12202 'udp src or dst port domain',
12203 # degenerate "portrange"
12204 'udp portrange 53-53',
12205 'udp portrange 53-domain',
12206 'udp portrange domain-53',
12207 'udp portrange domain-domain',
12208 'udp portrange 53',
12209 # "53" is a valid port range, but "domain" is not.
12210 'udp src or dst portrange 53-53',
12211 'udp src or dst portrange 53-domain',
12212 'udp src or dst portrange domain-53',
12213 'udp src or dst portrange domain-domain',
12214 'udp src or dst portrange 53',
12215 ],
12216 opt => '
12217 (000) ldh [12]
12218 (001) jeq #0x86dd jt 2 jf 8
12219 (002) ldb [20]
12220 (003) jeq #0x11 jt 4 jf 19
12221 (004) ldh [54]
12222 (005) jeq #0x35 jt 18 jf 6
12223 (006) ldh [56]
12224 (007) jeq #0x35 jt 18 jf 19
12225 (008) jeq #0x800 jt 9 jf 19
12226 (009) ldb [23]
12227 (010) jeq #0x11 jt 11 jf 19
12228 (011) ldh [20]
12229 (012) jset #0x1fff jt 19 jf 13
12230 (013) ldxb 4*([14]&0xf)
12231 (014) ldh [x + 14]
12232 (015) jeq #0x35 jt 18 jf 16
12233 (016) ldh [x + 16]
12234 (017) jeq #0x35 jt 18 jf 19
12235 (018) ret #262144
12236 (019) ret #0
12237 ',
12238 unopt => '
12239 (000) ldh [12]
12240 (001) jeq #0x86dd jt 2 jf 8
12241 (002) ldb [20]
12242 (003) jeq #0x11 jt 4 jf 8
12243 (004) ldh [54]
12244 (005) jeq #0x35 jt 20 jf 6
12245 (006) ldh [56]
12246 (007) jeq #0x35 jt 20 jf 8
12247 (008) ldh [12]
12248 (009) jeq #0x800 jt 10 jf 21
12249 (010) ldb [23]
12250 (011) jeq #0x11 jt 12 jf 21
12251 (012) ldh [20]
12252 (013) jset #0x1fff jt 21 jf 14
12253 (014) ldxb 4*([14]&0xf)
12254 (015) ldh [x + 14]
12255 (016) jeq #0x35 jt 20 jf 17
12256 (017) ldxb 4*([14]&0xf)
12257 (018) ldh [x + 16]
12258 (019) jeq #0x35 jt 20 jf 21
12259 (020) ret #262144
12260 (021) ret #0
12261 ',
12262 }, # udp_port
12263 {
12264 name => 'udp_src_port',
12265 DLT => 'EN10MB',
12266 aliases => [
12267 'udp src port 53',
12268 'udp src port domain',
12269 # degenerate "src portrange"
12270 'udp src portrange 53-53',
12271 'udp src portrange 53-domain',
12272 'udp src portrange domain-53',
12273 'udp src portrange domain-domain',
12274 'udp src portrange 53',
12275 ],
12276 opt => '
12277 (000) ldh [12]
12278 (001) jeq #0x86dd jt 2 jf 6
12279 (002) ldb [20]
12280 (003) jeq #0x11 jt 4 jf 15
12281 (004) ldh [54]
12282 (005) jeq #0x35 jt 14 jf 15
12283 (006) jeq #0x800 jt 7 jf 15
12284 (007) ldb [23]
12285 (008) jeq #0x11 jt 9 jf 15
12286 (009) ldh [20]
12287 (010) jset #0x1fff jt 15 jf 11
12288 (011) ldxb 4*([14]&0xf)
12289 (012) ldh [x + 14]
12290 (013) jeq #0x35 jt 14 jf 15
12291 (014) ret #262144
12292 (015) ret #0
12293 ',
12294 unopt => '
12295 (000) ldh [12]
12296 (001) jeq #0x86dd jt 2 jf 6
12297 (002) ldb [20]
12298 (003) jeq #0x11 jt 4 jf 6
12299 (004) ldh [54]
12300 (005) jeq #0x35 jt 15 jf 6
12301 (006) ldh [12]
12302 (007) jeq #0x800 jt 8 jf 16
12303 (008) ldb [23]
12304 (009) jeq #0x11 jt 10 jf 16
12305 (010) ldh [20]
12306 (011) jset #0x1fff jt 16 jf 12
12307 (012) ldxb 4*([14]&0xf)
12308 (013) ldh [x + 14]
12309 (014) jeq #0x35 jt 15 jf 16
12310 (015) ret #262144
12311 (016) ret #0
12312 ',
12313 }, # udp_src_port
12314 {
12315 name => 'udp_dst_port',
12316 DLT => 'EN10MB',
12317 aliases => [
12318 'udp dst port 53',
12319 'udp dst port domain',
12320 # degenerate "dst portrange"
12321 'udp dst portrange 53-53',
12322 'udp dst portrange 53-domain',
12323 'udp dst portrange domain-53',
12324 'udp dst portrange domain-domain',
12325 'udp dst portrange 53',
12326 ],
12327 opt => '
12328 (000) ldh [12]
12329 (001) jeq #0x86dd jt 2 jf 6
12330 (002) ldb [20]
12331 (003) jeq #0x11 jt 4 jf 15
12332 (004) ldh [56]
12333 (005) jeq #0x35 jt 14 jf 15
12334 (006) jeq #0x800 jt 7 jf 15
12335 (007) ldb [23]
12336 (008) jeq #0x11 jt 9 jf 15
12337 (009) ldh [20]
12338 (010) jset #0x1fff jt 15 jf 11
12339 (011) ldxb 4*([14]&0xf)
12340 (012) ldh [x + 16]
12341 (013) jeq #0x35 jt 14 jf 15
12342 (014) ret #262144
12343 (015) ret #0
12344 ',
12345 unopt => '
12346 (000) ldh [12]
12347 (001) jeq #0x86dd jt 2 jf 6
12348 (002) ldb [20]
12349 (003) jeq #0x11 jt 4 jf 6
12350 (004) ldh [56]
12351 (005) jeq #0x35 jt 15 jf 6
12352 (006) ldh [12]
12353 (007) jeq #0x800 jt 8 jf 16
12354 (008) ldb [23]
12355 (009) jeq #0x11 jt 10 jf 16
12356 (010) ldh [20]
12357 (011) jset #0x1fff jt 16 jf 12
12358 (012) ldxb 4*([14]&0xf)
12359 (013) ldh [x + 16]
12360 (014) jeq #0x35 jt 15 jf 16
12361 (015) ret #262144
12362 (016) ret #0
12363 ',
12364 }, # udp_dst_port
12365 {
12366 name => 'udp_portrange',
12367 DLT => 'EN10MB',
12368 aliases => [
12369 'udp portrange 67-68',
12370 'udp portrange 67-bootpc',
12371 'udp portrange bootps-68',
12372 'udp portrange bootps-bootpc',
12373 'udp portrange 68-67',
12374 'udp portrange bootpc-67',
12375 'udp portrange 68-bootps',
12376 'udp portrange bootpc-bootps',
12377 'udp src or dst portrange 67-68',
12378 'udp src or dst portrange 67-bootpc',
12379 'udp src or dst portrange bootps-68',
12380 'udp src or dst portrange bootps-bootpc',
12381 'udp src or dst portrange 68-67',
12382 'udp src or dst portrange bootpc-67',
12383 'udp src or dst portrange 68-bootps',
12384 'udp src or dst portrange bootpc-bootps',
12385 ],
12386 opt => '
12387 (000) ldh [12]
12388 (001) jeq #0x86dd jt 2 jf 9
12389 (002) ldb [20]
12390 (003) jeq #0x11 jt 4 jf 22
12391 (004) ldh [54]
12392 (005) jge #0x43 jt 6 jf 7
12393 (006) jgt #0x44 jt 7 jf 21
12394 (007) ldh [56]
12395 (008) jge #0x43 jt 20 jf 22
12396 (009) jeq #0x800 jt 10 jf 22
12397 (010) ldb [23]
12398 (011) jeq #0x11 jt 12 jf 22
12399 (012) ldh [20]
12400 (013) jset #0x1fff jt 22 jf 14
12401 (014) ldxb 4*([14]&0xf)
12402 (015) ldh [x + 14]
12403 (016) jge #0x43 jt 17 jf 18
12404 (017) jgt #0x44 jt 18 jf 21
12405 (018) ldh [x + 16]
12406 (019) jge #0x43 jt 20 jf 22
12407 (020) jgt #0x44 jt 22 jf 21
12408 (021) ret #262144
12409 (022) ret #0
12410 ',
12411 unopt => '
12412 (000) ldh [12]
12413 (001) jeq #0x86dd jt 2 jf 12
12414 (002) ldb [20]
12415 (003) jeq #0x11 jt 4 jf 12
12416 (004) ldh [54]
12417 (005) jge #0x43 jt 6 jf 8
12418 (006) ldh [54]
12419 (007) jgt #0x44 jt 8 jf 30
12420 (008) ldh [56]
12421 (009) jge #0x43 jt 10 jf 12
12422 (010) ldh [56]
12423 (011) jgt #0x44 jt 12 jf 30
12424 (012) ldh [12]
12425 (013) jeq #0x800 jt 14 jf 31
12426 (014) ldb [23]
12427 (015) jeq #0x11 jt 16 jf 31
12428 (016) ldh [20]
12429 (017) jset #0x1fff jt 31 jf 18
12430 (018) ldxb 4*([14]&0xf)
12431 (019) ldh [x + 14]
12432 (020) jge #0x43 jt 21 jf 24
12433 (021) ldxb 4*([14]&0xf)
12434 (022) ldh [x + 14]
12435 (023) jgt #0x44 jt 24 jf 30
12436 (024) ldxb 4*([14]&0xf)
12437 (025) ldh [x + 16]
12438 (026) jge #0x43 jt 27 jf 31
12439 (027) ldxb 4*([14]&0xf)
12440 (028) ldh [x + 16]
12441 (029) jgt #0x44 jt 31 jf 30
12442 (030) ret #262144
12443 (031) ret #0
12444 ',
12445 }, # udp_portrange
12446 {
12447 name => 'udp_src_portrange',
12448 DLT => 'EN10MB',
12449 aliases => [
12450 'udp src portrange 67-68',
12451 'udp src portrange 67-bootpc',
12452 'udp src portrange bootps-68',
12453 'udp src portrange bootps-bootpc',
12454 'udp src portrange 68-67',
12455 'udp src portrange bootpc-67',
12456 'udp src portrange 68-bootps',
12457 'udp src portrange bootpc-bootps',
12458 ],
12459 opt => '
12460 (000) ldh [12]
12461 (001) jeq #0x86dd jt 2 jf 6
12462 (002) ldb [20]
12463 (003) jeq #0x11 jt 4 jf 16
12464 (004) ldh [54]
12465 (005) jge #0x43 jt 14 jf 16
12466 (006) jeq #0x800 jt 7 jf 16
12467 (007) ldb [23]
12468 (008) jeq #0x11 jt 9 jf 16
12469 (009) ldh [20]
12470 (010) jset #0x1fff jt 16 jf 11
12471 (011) ldxb 4*([14]&0xf)
12472 (012) ldh [x + 14]
12473 (013) jge #0x43 jt 14 jf 16
12474 (014) jgt #0x44 jt 16 jf 15
12475 (015) ret #262144
12476 (016) ret #0
12477 ',
12478 unopt => '
12479 (000) ldh [12]
12480 (001) jeq #0x86dd jt 2 jf 8
12481 (002) ldb [20]
12482 (003) jeq #0x11 jt 4 jf 8
12483 (004) ldh [54]
12484 (005) jge #0x43 jt 6 jf 8
12485 (006) ldh [54]
12486 (007) jgt #0x44 jt 8 jf 20
12487 (008) ldh [12]
12488 (009) jeq #0x800 jt 10 jf 21
12489 (010) ldb [23]
12490 (011) jeq #0x11 jt 12 jf 21
12491 (012) ldh [20]
12492 (013) jset #0x1fff jt 21 jf 14
12493 (014) ldxb 4*([14]&0xf)
12494 (015) ldh [x + 14]
12495 (016) jge #0x43 jt 17 jf 21
12496 (017) ldxb 4*([14]&0xf)
12497 (018) ldh [x + 14]
12498 (019) jgt #0x44 jt 21 jf 20
12499 (020) ret #262144
12500 (021) ret #0
12501 ',
12502 }, # udp_src_portrange
12503 {
12504 name => 'udp_dst_portrange',
12505 DLT => 'EN10MB',
12506 aliases => [
12507 'udp dst portrange 67-68',
12508 'udp dst portrange 67-bootpc',
12509 'udp dst portrange bootps-68',
12510 'udp dst portrange bootps-bootpc',
12511 'udp dst portrange 68-67',
12512 'udp dst portrange bootpc-67',
12513 'udp dst portrange 68-bootps',
12514 'udp dst portrange bootpc-bootps',
12515 ],
12516 opt => '
12517 (000) ldh [12]
12518 (001) jeq #0x86dd jt 2 jf 6
12519 (002) ldb [20]
12520 (003) jeq #0x11 jt 4 jf 16
12521 (004) ldh [56]
12522 (005) jge #0x43 jt 14 jf 16
12523 (006) jeq #0x800 jt 7 jf 16
12524 (007) ldb [23]
12525 (008) jeq #0x11 jt 9 jf 16
12526 (009) ldh [20]
12527 (010) jset #0x1fff jt 16 jf 11
12528 (011) ldxb 4*([14]&0xf)
12529 (012) ldh [x + 16]
12530 (013) jge #0x43 jt 14 jf 16
12531 (014) jgt #0x44 jt 16 jf 15
12532 (015) ret #262144
12533 (016) ret #0
12534 ',
12535 unopt => '
12536 (000) ldh [12]
12537 (001) jeq #0x86dd jt 2 jf 8
12538 (002) ldb [20]
12539 (003) jeq #0x11 jt 4 jf 8
12540 (004) ldh [56]
12541 (005) jge #0x43 jt 6 jf 8
12542 (006) ldh [56]
12543 (007) jgt #0x44 jt 8 jf 20
12544 (008) ldh [12]
12545 (009) jeq #0x800 jt 10 jf 21
12546 (010) ldb [23]
12547 (011) jeq #0x11 jt 12 jf 21
12548 (012) ldh [20]
12549 (013) jset #0x1fff jt 21 jf 14
12550 (014) ldxb 4*([14]&0xf)
12551 (015) ldh [x + 16]
12552 (016) jge #0x43 jt 17 jf 21
12553 (017) ldxb 4*([14]&0xf)
12554 (018) ldh [x + 16]
12555 (019) jgt #0x44 jt 21 jf 20
12556 (020) ret #262144
12557 (021) ret #0
12558 ',
12559 }, # udp_dst_portrange
12560 # SCTP tests below do not use service names because the translation is
12561 # currently broken and may not have a suitable /etc/services contents
12562 # in all supported environments after the bug fix.
12563 {
12564 name => 'sctp_port',
12565 DLT => 'EN10MB',
12566 aliases => [
12567 'sctp port 5672',
12568 'sctp src or dst port 5672',
12569 # degenerate "portrange"
12570 'sctp portrange 5672-5672',
12571 'sctp portrange 5672',
12572 'sctp src or dst portrange 5672-5672',
12573 'sctp src or dst portrange 5672',
12574 ],
12575 opt => '
12576 (000) ldh [12]
12577 (001) jeq #0x86dd jt 2 jf 8
12578 (002) ldb [20]
12579 (003) jeq #0x84 jt 4 jf 19
12580 (004) ldh [54]
12581 (005) jeq #0x1628 jt 18 jf 6
12582 (006) ldh [56]
12583 (007) jeq #0x1628 jt 18 jf 19
12584 (008) jeq #0x800 jt 9 jf 19
12585 (009) ldb [23]
12586 (010) jeq #0x84 jt 11 jf 19
12587 (011) ldh [20]
12588 (012) jset #0x1fff jt 19 jf 13
12589 (013) ldxb 4*([14]&0xf)
12590 (014) ldh [x + 14]
12591 (015) jeq #0x1628 jt 18 jf 16
12592 (016) ldh [x + 16]
12593 (017) jeq #0x1628 jt 18 jf 19
12594 (018) ret #262144
12595 (019) ret #0
12596 ',
12597 unopt => '
12598 (000) ldh [12]
12599 (001) jeq #0x86dd jt 2 jf 8
12600 (002) ldb [20]
12601 (003) jeq #0x84 jt 4 jf 8
12602 (004) ldh [54]
12603 (005) jeq #0x1628 jt 20 jf 6
12604 (006) ldh [56]
12605 (007) jeq #0x1628 jt 20 jf 8
12606 (008) ldh [12]
12607 (009) jeq #0x800 jt 10 jf 21
12608 (010) ldb [23]
12609 (011) jeq #0x84 jt 12 jf 21
12610 (012) ldh [20]
12611 (013) jset #0x1fff jt 21 jf 14
12612 (014) ldxb 4*([14]&0xf)
12613 (015) ldh [x + 14]
12614 (016) jeq #0x1628 jt 20 jf 17
12615 (017) ldxb 4*([14]&0xf)
12616 (018) ldh [x + 16]
12617 (019) jeq #0x1628 jt 20 jf 21
12618 (020) ret #262144
12619 (021) ret #0
12620 ',
12621 }, # sctp_port
12622 {
12623 name => 'sctp_src_port',
12624 DLT => 'EN10MB',
12625 aliases => [
12626 'sctp src port 5672',
12627 # degenerate "src portrange"
12628 'sctp src portrange 5672-5672',
12629 'sctp src portrange 5672',
12630 ],
12631 opt => '
12632 (000) ldh [12]
12633 (001) jeq #0x86dd jt 2 jf 6
12634 (002) ldb [20]
12635 (003) jeq #0x84 jt 4 jf 15
12636 (004) ldh [54]
12637 (005) jeq #0x1628 jt 14 jf 15
12638 (006) jeq #0x800 jt 7 jf 15
12639 (007) ldb [23]
12640 (008) jeq #0x84 jt 9 jf 15
12641 (009) ldh [20]
12642 (010) jset #0x1fff jt 15 jf 11
12643 (011) ldxb 4*([14]&0xf)
12644 (012) ldh [x + 14]
12645 (013) jeq #0x1628 jt 14 jf 15
12646 (014) ret #262144
12647 (015) ret #0
12648 ',
12649 unopt => '
12650 (000) ldh [12]
12651 (001) jeq #0x86dd jt 2 jf 6
12652 (002) ldb [20]
12653 (003) jeq #0x84 jt 4 jf 6
12654 (004) ldh [54]
12655 (005) jeq #0x1628 jt 15 jf 6
12656 (006) ldh [12]
12657 (007) jeq #0x800 jt 8 jf 16
12658 (008) ldb [23]
12659 (009) jeq #0x84 jt 10 jf 16
12660 (010) ldh [20]
12661 (011) jset #0x1fff jt 16 jf 12
12662 (012) ldxb 4*([14]&0xf)
12663 (013) ldh [x + 14]
12664 (014) jeq #0x1628 jt 15 jf 16
12665 (015) ret #262144
12666 (016) ret #0
12667 ',
12668 }, # sctp_src_port
12669 {
12670 name => 'sctp_dst_port',
12671 DLT => 'EN10MB',
12672 aliases => [
12673 'sctp dst port 5672',
12674 # degenerate "dst portrange"
12675 'sctp dst portrange 5672-5672',
12676 'sctp dst portrange 5672',
12677 ],
12678 opt => '
12679 (000) ldh [12]
12680 (001) jeq #0x86dd jt 2 jf 6
12681 (002) ldb [20]
12682 (003) jeq #0x84 jt 4 jf 15
12683 (004) ldh [56]
12684 (005) jeq #0x1628 jt 14 jf 15
12685 (006) jeq #0x800 jt 7 jf 15
12686 (007) ldb [23]
12687 (008) jeq #0x84 jt 9 jf 15
12688 (009) ldh [20]
12689 (010) jset #0x1fff jt 15 jf 11
12690 (011) ldxb 4*([14]&0xf)
12691 (012) ldh [x + 16]
12692 (013) jeq #0x1628 jt 14 jf 15
12693 (014) ret #262144
12694 (015) ret #0
12695 ',
12696 unopt => '
12697 (000) ldh [12]
12698 (001) jeq #0x86dd jt 2 jf 6
12699 (002) ldb [20]
12700 (003) jeq #0x84 jt 4 jf 6
12701 (004) ldh [56]
12702 (005) jeq #0x1628 jt 15 jf 6
12703 (006) ldh [12]
12704 (007) jeq #0x800 jt 8 jf 16
12705 (008) ldb [23]
12706 (009) jeq #0x84 jt 10 jf 16
12707 (010) ldh [20]
12708 (011) jset #0x1fff jt 16 jf 12
12709 (012) ldxb 4*([14]&0xf)
12710 (013) ldh [x + 16]
12711 (014) jeq #0x1628 jt 15 jf 16
12712 (015) ret #262144
12713 (016) ret #0
12714 ',
12715 }, # sctp_dst_port
12716 {
12717 name => 'sctp_portrange',
12718 DLT => 'EN10MB',
12719 aliases => [
12720 'sctp portrange 1-1023',
12721 'sctp portrange 1023-1',
12722 'sctp src or dst portrange 1-1023',
12723 'sctp src or dst portrange 1023-1',
12724 ],
12725 opt => '
12726 (000) ldh [12]
12727 (001) jeq #0x86dd jt 2 jf 9
12728 (002) ldb [20]
12729 (003) jeq #0x84 jt 4 jf 22
12730 (004) ldh [54]
12731 (005) jge #0x1 jt 6 jf 7
12732 (006) jgt #0x3ff jt 7 jf 21
12733 (007) ldh [56]
12734 (008) jge #0x1 jt 20 jf 22
12735 (009) jeq #0x800 jt 10 jf 22
12736 (010) ldb [23]
12737 (011) jeq #0x84 jt 12 jf 22
12738 (012) ldh [20]
12739 (013) jset #0x1fff jt 22 jf 14
12740 (014) ldxb 4*([14]&0xf)
12741 (015) ldh [x + 14]
12742 (016) jge #0x1 jt 17 jf 18
12743 (017) jgt #0x3ff jt 18 jf 21
12744 (018) ldh [x + 16]
12745 (019) jge #0x1 jt 20 jf 22
12746 (020) jgt #0x3ff jt 22 jf 21
12747 (021) ret #262144
12748 (022) ret #0
12749 ',
12750 unopt => '
12751 (000) ldh [12]
12752 (001) jeq #0x86dd jt 2 jf 12
12753 (002) ldb [20]
12754 (003) jeq #0x84 jt 4 jf 12
12755 (004) ldh [54]
12756 (005) jge #0x1 jt 6 jf 8
12757 (006) ldh [54]
12758 (007) jgt #0x3ff jt 8 jf 30
12759 (008) ldh [56]
12760 (009) jge #0x1 jt 10 jf 12
12761 (010) ldh [56]
12762 (011) jgt #0x3ff jt 12 jf 30
12763 (012) ldh [12]
12764 (013) jeq #0x800 jt 14 jf 31
12765 (014) ldb [23]
12766 (015) jeq #0x84 jt 16 jf 31
12767 (016) ldh [20]
12768 (017) jset #0x1fff jt 31 jf 18
12769 (018) ldxb 4*([14]&0xf)
12770 (019) ldh [x + 14]
12771 (020) jge #0x1 jt 21 jf 24
12772 (021) ldxb 4*([14]&0xf)
12773 (022) ldh [x + 14]
12774 (023) jgt #0x3ff jt 24 jf 30
12775 (024) ldxb 4*([14]&0xf)
12776 (025) ldh [x + 16]
12777 (026) jge #0x1 jt 27 jf 31
12778 (027) ldxb 4*([14]&0xf)
12779 (028) ldh [x + 16]
12780 (029) jgt #0x3ff jt 31 jf 30
12781 (030) ret #262144
12782 (031) ret #0
12783 ',
12784 }, # sctp_portrange
12785 {
12786 name => 'sctp_src_portrange',
12787 DLT => 'EN10MB',
12788 aliases => [
12789 'sctp src portrange 1-1023',
12790 'sctp src portrange 1023-1',
12791 ],
12792 opt => '
12793 (000) ldh [12]
12794 (001) jeq #0x86dd jt 2 jf 6
12795 (002) ldb [20]
12796 (003) jeq #0x84 jt 4 jf 16
12797 (004) ldh [54]
12798 (005) jge #0x1 jt 14 jf 16
12799 (006) jeq #0x800 jt 7 jf 16
12800 (007) ldb [23]
12801 (008) jeq #0x84 jt 9 jf 16
12802 (009) ldh [20]
12803 (010) jset #0x1fff jt 16 jf 11
12804 (011) ldxb 4*([14]&0xf)
12805 (012) ldh [x + 14]
12806 (013) jge #0x1 jt 14 jf 16
12807 (014) jgt #0x3ff jt 16 jf 15
12808 (015) ret #262144
12809 (016) ret #0
12810 ',
12811 unopt => '
12812 (000) ldh [12]
12813 (001) jeq #0x86dd jt 2 jf 8
12814 (002) ldb [20]
12815 (003) jeq #0x84 jt 4 jf 8
12816 (004) ldh [54]
12817 (005) jge #0x1 jt 6 jf 8
12818 (006) ldh [54]
12819 (007) jgt #0x3ff jt 8 jf 20
12820 (008) ldh [12]
12821 (009) jeq #0x800 jt 10 jf 21
12822 (010) ldb [23]
12823 (011) jeq #0x84 jt 12 jf 21
12824 (012) ldh [20]
12825 (013) jset #0x1fff jt 21 jf 14
12826 (014) ldxb 4*([14]&0xf)
12827 (015) ldh [x + 14]
12828 (016) jge #0x1 jt 17 jf 21
12829 (017) ldxb 4*([14]&0xf)
12830 (018) ldh [x + 14]
12831 (019) jgt #0x3ff jt 21 jf 20
12832 (020) ret #262144
12833 (021) ret #0
12834 ',
12835 }, # sctp_src_portrange
12836 {
12837 name => 'sctp_dst_portrange',
12838 DLT => 'EN10MB',
12839 aliases => [
12840 'sctp dst portrange 1-1023',
12841 'sctp dst portrange 1023-1',
12842 ],
12843 opt => '
12844 (000) ldh [12]
12845 (001) jeq #0x86dd jt 2 jf 6
12846 (002) ldb [20]
12847 (003) jeq #0x84 jt 4 jf 16
12848 (004) ldh [56]
12849 (005) jge #0x1 jt 14 jf 16
12850 (006) jeq #0x800 jt 7 jf 16
12851 (007) ldb [23]
12852 (008) jeq #0x84 jt 9 jf 16
12853 (009) ldh [20]
12854 (010) jset #0x1fff jt 16 jf 11
12855 (011) ldxb 4*([14]&0xf)
12856 (012) ldh [x + 16]
12857 (013) jge #0x1 jt 14 jf 16
12858 (014) jgt #0x3ff jt 16 jf 15
12859 (015) ret #262144
12860 (016) ret #0
12861 ',
12862 unopt => '
12863 (000) ldh [12]
12864 (001) jeq #0x86dd jt 2 jf 8
12865 (002) ldb [20]
12866 (003) jeq #0x84 jt 4 jf 8
12867 (004) ldh [56]
12868 (005) jge #0x1 jt 6 jf 8
12869 (006) ldh [56]
12870 (007) jgt #0x3ff jt 8 jf 20
12871 (008) ldh [12]
12872 (009) jeq #0x800 jt 10 jf 21
12873 (010) ldb [23]
12874 (011) jeq #0x84 jt 12 jf 21
12875 (012) ldh [20]
12876 (013) jset #0x1fff jt 21 jf 14
12877 (014) ldxb 4*([14]&0xf)
12878 (015) ldh [x + 16]
12879 (016) jge #0x1 jt 17 jf 21
12880 (017) ldxb 4*([14]&0xf)
12881 (018) ldh [x + 16]
12882 (019) jgt #0x3ff jt 21 jf 20
12883 (020) ret #262144
12884 (021) ret #0
12885 ',
12886 }, # sctp_dst_portrange
12887 {
12888 name => 'port',
12889 DLT => 'EN10MB',
12890 aliases => [
12891 'port 7',
12892 'src or dst port 7',
12893 # Do not try a service name due to SCTP.
12894 # degenerate "portrange"
12895 'portrange 7-7',
12896 'portrange 7',
12897 ],
12898 opt => '
12899 (000) ldh [12]
12900 (001) jeq #0x86dd jt 2 jf 10
12901 (002) ldb [20]
12902 (003) jeq #0x84 jt 6 jf 4
12903 (004) jeq #0x6 jt 6 jf 5
12904 (005) jeq #0x11 jt 6 jf 23
12905 (006) ldh [54]
12906 (007) jeq #0x7 jt 22 jf 8
12907 (008) ldh [56]
12908 (009) jeq #0x7 jt 22 jf 23
12909 (010) jeq #0x800 jt 11 jf 23
12910 (011) ldb [23]
12911 (012) jeq #0x84 jt 15 jf 13
12912 (013) jeq #0x6 jt 15 jf 14
12913 (014) jeq #0x11 jt 15 jf 23
12914 (015) ldh [20]
12915 (016) jset #0x1fff jt 23 jf 17
12916 (017) ldxb 4*([14]&0xf)
12917 (018) ldh [x + 14]
12918 (019) jeq #0x7 jt 22 jf 20
12919 (020) ldh [x + 16]
12920 (021) jeq #0x7 jt 22 jf 23
12921 (022) ret #262144
12922 (023) ret #0
12923 ',
12924 unopt => '
12925 (000) ldh [12]
12926 (001) jeq #0x86dd jt 2 jf 12
12927 (002) ldb [20]
12928 (003) jeq #0x84 jt 8 jf 4
12929 (004) ldb [20]
12930 (005) jeq #0x6 jt 8 jf 6
12931 (006) ldb [20]
12932 (007) jeq #0x11 jt 8 jf 12
12933 (008) ldh [54]
12934 (009) jeq #0x7 jt 28 jf 10
12935 (010) ldh [56]
12936 (011) jeq #0x7 jt 28 jf 12
12937 (012) ldh [12]
12938 (013) jeq #0x800 jt 14 jf 29
12939 (014) ldb [23]
12940 (015) jeq #0x84 jt 20 jf 16
12941 (016) ldb [23]
12942 (017) jeq #0x6 jt 20 jf 18
12943 (018) ldb [23]
12944 (019) jeq #0x11 jt 20 jf 29
12945 (020) ldh [20]
12946 (021) jset #0x1fff jt 29 jf 22
12947 (022) ldxb 4*([14]&0xf)
12948 (023) ldh [x + 14]
12949 (024) jeq #0x7 jt 28 jf 25
12950 (025) ldxb 4*([14]&0xf)
12951 (026) ldh [x + 16]
12952 (027) jeq #0x7 jt 28 jf 29
12953 (028) ret #262144
12954 (029) ret #0
12955 ',
12956 }, # port
12957 {
12958 name => 'src_port',
12959 DLT => 'EN10MB',
12960 aliases => [
12961 'src port 7',
12962 # degenerate "src portrange"
12963 'src portrange 7-7',
12964 'src portrange 7',
12965 ],
12966 opt => '
12967 (000) ldh [12]
12968 (001) jeq #0x86dd jt 2 jf 8
12969 (002) ldb [20]
12970 (003) jeq #0x84 jt 6 jf 4
12971 (004) jeq #0x6 jt 6 jf 5
12972 (005) jeq #0x11 jt 6 jf 19
12973 (006) ldh [54]
12974 (007) jeq #0x7 jt 18 jf 19
12975 (008) jeq #0x800 jt 9 jf 19
12976 (009) ldb [23]
12977 (010) jeq #0x84 jt 13 jf 11
12978 (011) jeq #0x6 jt 13 jf 12
12979 (012) jeq #0x11 jt 13 jf 19
12980 (013) ldh [20]
12981 (014) jset #0x1fff jt 19 jf 15
12982 (015) ldxb 4*([14]&0xf)
12983 (016) ldh [x + 14]
12984 (017) jeq #0x7 jt 18 jf 19
12985 (018) ret #262144
12986 (019) ret #0
12987 ',
12988 unopt => '
12989 (000) ldh [12]
12990 (001) jeq #0x86dd jt 2 jf 10
12991 (002) ldb [20]
12992 (003) jeq #0x84 jt 8 jf 4
12993 (004) ldb [20]
12994 (005) jeq #0x6 jt 8 jf 6
12995 (006) ldb [20]
12996 (007) jeq #0x11 jt 8 jf 10
12997 (008) ldh [54]
12998 (009) jeq #0x7 jt 23 jf 10
12999 (010) ldh [12]
13000 (011) jeq #0x800 jt 12 jf 24
13001 (012) ldb [23]
13002 (013) jeq #0x84 jt 18 jf 14
13003 (014) ldb [23]
13004 (015) jeq #0x6 jt 18 jf 16
13005 (016) ldb [23]
13006 (017) jeq #0x11 jt 18 jf 24
13007 (018) ldh [20]
13008 (019) jset #0x1fff jt 24 jf 20
13009 (020) ldxb 4*([14]&0xf)
13010 (021) ldh [x + 14]
13011 (022) jeq #0x7 jt 23 jf 24
13012 (023) ret #262144
13013 (024) ret #0
13014 ',
13015 }, # src_port
13016 {
13017 name => 'dst_port',
13018 DLT => 'EN10MB',
13019 aliases => [
13020 'dst port 7',
13021 # degenerate "dst portrange"
13022 'dst portrange 7-7',
13023 'dst portrange 7',
13024 ],
13025 opt => '
13026 (000) ldh [12]
13027 (001) jeq #0x86dd jt 2 jf 8
13028 (002) ldb [20]
13029 (003) jeq #0x84 jt 6 jf 4
13030 (004) jeq #0x6 jt 6 jf 5
13031 (005) jeq #0x11 jt 6 jf 19
13032 (006) ldh [56]
13033 (007) jeq #0x7 jt 18 jf 19
13034 (008) jeq #0x800 jt 9 jf 19
13035 (009) ldb [23]
13036 (010) jeq #0x84 jt 13 jf 11
13037 (011) jeq #0x6 jt 13 jf 12
13038 (012) jeq #0x11 jt 13 jf 19
13039 (013) ldh [20]
13040 (014) jset #0x1fff jt 19 jf 15
13041 (015) ldxb 4*([14]&0xf)
13042 (016) ldh [x + 16]
13043 (017) jeq #0x7 jt 18 jf 19
13044 (018) ret #262144
13045 (019) ret #0
13046 ',
13047 unopt => '
13048 (000) ldh [12]
13049 (001) jeq #0x86dd jt 2 jf 10
13050 (002) ldb [20]
13051 (003) jeq #0x84 jt 8 jf 4
13052 (004) ldb [20]
13053 (005) jeq #0x6 jt 8 jf 6
13054 (006) ldb [20]
13055 (007) jeq #0x11 jt 8 jf 10
13056 (008) ldh [56]
13057 (009) jeq #0x7 jt 23 jf 10
13058 (010) ldh [12]
13059 (011) jeq #0x800 jt 12 jf 24
13060 (012) ldb [23]
13061 (013) jeq #0x84 jt 18 jf 14
13062 (014) ldb [23]
13063 (015) jeq #0x6 jt 18 jf 16
13064 (016) ldb [23]
13065 (017) jeq #0x11 jt 18 jf 24
13066 (018) ldh [20]
13067 (019) jset #0x1fff jt 24 jf 20
13068 (020) ldxb 4*([14]&0xf)
13069 (021) ldh [x + 16]
13070 (022) jeq #0x7 jt 23 jf 24
13071 (023) ret #262144
13072 (024) ret #0
13073 ',
13074 }, # dst_port
13075 {
13076 name => 'portrange',
13077 DLT => 'EN10MB',
13078 aliases => [
13079 'portrange 1-1023',
13080 'portrange 1023-1',
13081 ],
13082 opt => '
13083 (000) ldh [12]
13084 (001) jeq #0x86dd jt 2 jf 11
13085 (002) ldb [20]
13086 (003) jeq #0x84 jt 6 jf 4
13087 (004) jeq #0x6 jt 6 jf 5
13088 (005) jeq #0x11 jt 6 jf 26
13089 (006) ldh [54]
13090 (007) jge #0x1 jt 8 jf 9
13091 (008) jgt #0x3ff jt 9 jf 25
13092 (009) ldh [56]
13093 (010) jge #0x1 jt 24 jf 26
13094 (011) jeq #0x800 jt 12 jf 26
13095 (012) ldb [23]
13096 (013) jeq #0x84 jt 16 jf 14
13097 (014) jeq #0x6 jt 16 jf 15
13098 (015) jeq #0x11 jt 16 jf 26
13099 (016) ldh [20]
13100 (017) jset #0x1fff jt 26 jf 18
13101 (018) ldxb 4*([14]&0xf)
13102 (019) ldh [x + 14]
13103 (020) jge #0x1 jt 21 jf 22
13104 (021) jgt #0x3ff jt 22 jf 25
13105 (022) ldh [x + 16]
13106 (023) jge #0x1 jt 24 jf 26
13107 (024) jgt #0x3ff jt 26 jf 25
13108 (025) ret #262144
13109 (026) ret #0
13110 ',
13111 unopt => '
13112 (000) ldh [12]
13113 (001) jeq #0x86dd jt 2 jf 16
13114 (002) ldb [20]
13115 (003) jeq #0x84 jt 8 jf 4
13116 (004) ldb [20]
13117 (005) jeq #0x6 jt 8 jf 6
13118 (006) ldb [20]
13119 (007) jeq #0x11 jt 8 jf 16
13120 (008) ldh [54]
13121 (009) jge #0x1 jt 10 jf 12
13122 (010) ldh [54]
13123 (011) jgt #0x3ff jt 12 jf 38
13124 (012) ldh [56]
13125 (013) jge #0x1 jt 14 jf 16
13126 (014) ldh [56]
13127 (015) jgt #0x3ff jt 16 jf 38
13128 (016) ldh [12]
13129 (017) jeq #0x800 jt 18 jf 39
13130 (018) ldb [23]
13131 (019) jeq #0x84 jt 24 jf 20
13132 (020) ldb [23]
13133 (021) jeq #0x6 jt 24 jf 22
13134 (022) ldb [23]
13135 (023) jeq #0x11 jt 24 jf 39
13136 (024) ldh [20]
13137 (025) jset #0x1fff jt 39 jf 26
13138 (026) ldxb 4*([14]&0xf)
13139 (027) ldh [x + 14]
13140 (028) jge #0x1 jt 29 jf 32
13141 (029) ldxb 4*([14]&0xf)
13142 (030) ldh [x + 14]
13143 (031) jgt #0x3ff jt 32 jf 38
13144 (032) ldxb 4*([14]&0xf)
13145 (033) ldh [x + 16]
13146 (034) jge #0x1 jt 35 jf 39
13147 (035) ldxb 4*([14]&0xf)
13148 (036) ldh [x + 16]
13149 (037) jgt #0x3ff jt 39 jf 38
13150 (038) ret #262144
13151 (039) ret #0
13152 ',
13153 }, # portrange
13154 {
13155 name => 'src_portrange',
13156 DLT => 'EN10MB',
13157 aliases => [
13158 'src portrange 1-1023',
13159 'src portrange 1023-1',
13160 ],
13161 opt => '
13162 (000) ldh [12]
13163 (001) jeq #0x86dd jt 2 jf 8
13164 (002) ldb [20]
13165 (003) jeq #0x84 jt 6 jf 4
13166 (004) jeq #0x6 jt 6 jf 5
13167 (005) jeq #0x11 jt 6 jf 20
13168 (006) ldh [54]
13169 (007) jge #0x1 jt 18 jf 20
13170 (008) jeq #0x800 jt 9 jf 20
13171 (009) ldb [23]
13172 (010) jeq #0x84 jt 13 jf 11
13173 (011) jeq #0x6 jt 13 jf 12
13174 (012) jeq #0x11 jt 13 jf 20
13175 (013) ldh [20]
13176 (014) jset #0x1fff jt 20 jf 15
13177 (015) ldxb 4*([14]&0xf)
13178 (016) ldh [x + 14]
13179 (017) jge #0x1 jt 18 jf 20
13180 (018) jgt #0x3ff jt 20 jf 19
13181 (019) ret #262144
13182 (020) ret #0
13183 ',
13184 unopt => '
13185 (000) ldh [12]
13186 (001) jeq #0x86dd jt 2 jf 12
13187 (002) ldb [20]
13188 (003) jeq #0x84 jt 8 jf 4
13189 (004) ldb [20]
13190 (005) jeq #0x6 jt 8 jf 6
13191 (006) ldb [20]
13192 (007) jeq #0x11 jt 8 jf 12
13193 (008) ldh [54]
13194 (009) jge #0x1 jt 10 jf 12
13195 (010) ldh [54]
13196 (011) jgt #0x3ff jt 12 jf 28
13197 (012) ldh [12]
13198 (013) jeq #0x800 jt 14 jf 29
13199 (014) ldb [23]
13200 (015) jeq #0x84 jt 20 jf 16
13201 (016) ldb [23]
13202 (017) jeq #0x6 jt 20 jf 18
13203 (018) ldb [23]
13204 (019) jeq #0x11 jt 20 jf 29
13205 (020) ldh [20]
13206 (021) jset #0x1fff jt 29 jf 22
13207 (022) ldxb 4*([14]&0xf)
13208 (023) ldh [x + 14]
13209 (024) jge #0x1 jt 25 jf 29
13210 (025) ldxb 4*([14]&0xf)
13211 (026) ldh [x + 14]
13212 (027) jgt #0x3ff jt 29 jf 28
13213 (028) ret #262144
13214 (029) ret #0
13215 ',
13216 }, # src_portrange
13217 {
13218 name => 'dst_portrange',
13219 DLT => 'EN10MB',
13220 aliases => [
13221 'dst portrange 1-1023',
13222 'dst portrange 1023-1',
13223 ],
13224 opt => '
13225 (000) ldh [12]
13226 (001) jeq #0x86dd jt 2 jf 8
13227 (002) ldb [20]
13228 (003) jeq #0x84 jt 6 jf 4
13229 (004) jeq #0x6 jt 6 jf 5
13230 (005) jeq #0x11 jt 6 jf 20
13231 (006) ldh [56]
13232 (007) jge #0x1 jt 18 jf 20
13233 (008) jeq #0x800 jt 9 jf 20
13234 (009) ldb [23]
13235 (010) jeq #0x84 jt 13 jf 11
13236 (011) jeq #0x6 jt 13 jf 12
13237 (012) jeq #0x11 jt 13 jf 20
13238 (013) ldh [20]
13239 (014) jset #0x1fff jt 20 jf 15
13240 (015) ldxb 4*([14]&0xf)
13241 (016) ldh [x + 16]
13242 (017) jge #0x1 jt 18 jf 20
13243 (018) jgt #0x3ff jt 20 jf 19
13244 (019) ret #262144
13245 (020) ret #0
13246 ',
13247 unopt => '
13248 (000) ldh [12]
13249 (001) jeq #0x86dd jt 2 jf 12
13250 (002) ldb [20]
13251 (003) jeq #0x84 jt 8 jf 4
13252 (004) ldb [20]
13253 (005) jeq #0x6 jt 8 jf 6
13254 (006) ldb [20]
13255 (007) jeq #0x11 jt 8 jf 12
13256 (008) ldh [56]
13257 (009) jge #0x1 jt 10 jf 12
13258 (010) ldh [56]
13259 (011) jgt #0x3ff jt 12 jf 28
13260 (012) ldh [12]
13261 (013) jeq #0x800 jt 14 jf 29
13262 (014) ldb [23]
13263 (015) jeq #0x84 jt 20 jf 16
13264 (016) ldb [23]
13265 (017) jeq #0x6 jt 20 jf 18
13266 (018) ldb [23]
13267 (019) jeq #0x11 jt 20 jf 29
13268 (020) ldh [20]
13269 (021) jset #0x1fff jt 29 jf 22
13270 (022) ldxb 4*([14]&0xf)
13271 (023) ldh [x + 16]
13272 (024) jge #0x1 jt 25 jf 29
13273 (025) ldxb 4*([14]&0xf)
13274 (026) ldh [x + 16]
13275 (027) jgt #0x3ff jt 29 jf 28
13276 (028) ret #262144
13277 (029) ret #0
13278 ',
13279 }, # dst_portrange
13280 {
13281 name => 'byte_eq',
13282 DLT => 'IPV4',
13283 aliases => [
13284 'byte 8 = 5',
13285 'byte 8 == 5',
13286 ],
13287 unopt => '
13288 (000) ldb [8]
13289 (001) jeq #0x5 jt 2 jf 3
13290 (002) ret #262144
13291 (003) ret #0
13292 ',
13293 }, # byte_eq
13294 {
13295 name => 'byte_lt',
13296 DLT => 'IPV4',
13297 aliases => ['byte 8 < 5'],
13298 unopt => '
13299 (000) ldb [8]
13300 (001) jge #0x5 jt 2 jf 3
13301 (002) ret #0
13302 (003) ret #262144
13303 ',
13304 }, # byte_lt
13305 {
13306 name => 'byte_gt',
13307 DLT => 'IPV4',
13308 aliases => ['byte 8 > 5'],
13309 unopt => '
13310 (000) ldb [8]
13311 (001) jgt #0x5 jt 2 jf 3
13312 (002) ret #262144
13313 (003) ret #0
13314 ',
13315 }, # byte_gt
13316 {
13317 name => 'byte_or',
13318 DLT => 'IPV4',
13319 aliases => ['byte 8 | 5'],
13320 unopt => '
13321 (000) ldb [8]
13322 (001) or #0x5
13323 (002) jeq #0x0 jt 3 jf 4
13324 (003) ret #0
13325 (004) ret #262144
13326 ',
13327 }, # byte_or
13328 {
13329 name => 'byte_and',
13330 DLT => 'IPV4',
13331 aliases => ['byte 8 & 5'],
13332 unopt => '
13333 (000) ldb [8]
13334 (001) and #0x5
13335 (002) jeq #0x0 jt 3 jf 4
13336 (003) ret #0
13337 (004) ret #262144
13338 ',
13339 }, # byte_and
13340 );
13341
13342 # In apply_blocks each test block always generates two tests: optimized and
13343 # unoptimized. (Small tests often produce short bytecode that is already
13344 # optimal, in which case testing the "optimized" version again is a duplicate
13345 # work. However, it is not clear yet what would be the right way to avoid the
13346 # duplicate work without creating gaps in the test coverage.) A test block is
13347 # a hash, where the keys have the following meaning:
13348 #
13349 # * name, expr and netmask: same as in accept_blocks above
13350 # * savefile (mandatory, string): the file in tests/filter/ to use with
13351 # "filtertest -r", this should not have too many packets
13352 # * results (mandatory, array): the list of program filter results to expect
13353 my @apply_blocks = (
13354 {
13355 name => 'pppoed_nullary_on_ctp',
13356 savefile => 'loopback.pcap',
13357 expr => 'pppoed',
13358 results => [0, 0, 0, 0, 0, 0],
13359 },
13360 {
13361 name => 'pppoed_nullary_on_pppoed',
13362 savefile => 'pppoe.pcap',
13363 expr => 'pppoed',
13364 results => [1508],
13365 },
13366 {
13367 name => 'pppoed_nullary_on_pppoes',
13368 savefile => 'pppoes.pcap',
13369 expr => 'pppoed',
13370 results => [0, 0],
13371 },
13372 {
13373 name => 'pppoes_nullary_on_ctp',
13374 savefile => 'loopback.pcap',
13375 expr => 'pppoes',
13376 results => [0, 0, 0, 0, 0, 0],
13377 },
13378 {
13379 name => 'pppoes_nullary_on_pppoed',
13380 savefile => 'pppoe.pcap',
13381 expr => 'pppoes',
13382 results => [0],
13383 },
13384 {
13385 name => 'pppoes_nullary_on_pppoes',
13386 savefile => 'pppoes.pcap',
13387 expr => 'pppoes',
13388 results => [2000, 2000],
13389 },
13390 {
13391 name => 'pppoes_unary_on_ctp',
13392 savefile => 'loopback.pcap',
13393 expr => 'pppoes 0x3b',
13394 results => [0, 0, 0, 0, 0, 0],
13395 },
13396 {
13397 name => 'pppoes_unary_on_pppoed',
13398 savefile => 'pppoe.pcap',
13399 expr => 'pppoes 0x3b',
13400 results => [0],
13401 },
13402 {
13403 name => 'pppoes_unary_on_pppoes',
13404 savefile => 'pppoes.pcap',
13405 expr => 'pppoes 0x3b',
13406 results => [0, 2000],
13407 },
13408 {
13409 name => 'decnet_on_pppoed',
13410 savefile => 'pppoe.pcap',
13411 expr => 'decnet',
13412 results => [0],
13413 },
13414 {
13415 name => 'decnet_on_decnet',
13416 savefile => 'decnet.pcap',
13417 expr => 'decnet',
13418 # This tests EtherType, so every packet matches.
13419 results => [65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535],
13420 },
13421 {
13422 name => 'decnet_src_1_1_on_pppoed',
13423 savefile => 'pppoe.pcap',
13424 expr => 'decnet src 1.1',
13425 results => [0],
13426 },
13427 {
13428 name => 'decnet_dst_1_1_on_pppoed',
13429 savefile => 'pppoe.pcap',
13430 expr => 'decnet dst 1.1',
13431 results => [0],
13432 },
13433
13434 # This tests a DECnet address, which in the current implementation works
13435 # for data packets only. The first packet is an Ethernet Endnode Hello
13436 # message, so it does not match even though the packet is from node 1.1.
13437 {
13438 name => 'decnet_src_1_1_on_decnet',
13439 savefile => 'decnet.pcap',
13440 expr => 'decnet src 1.1',
13441 results => [0, 65535, 65535, 65535, 65535, 65535, 65535, 65535],
13442 },
13443 {
13444 name => 'decnet_dst_1_1_on_decnet',
13445 savefile => 'decnet.pcap',
13446 expr => 'decnet dst 1.1',
13447 results => [0, 65535, 65535, 65535, 65535, 65535, 65535, 65535],
13448 },
13449 {
13450 name => 'decnet_src_not_1_1_on_decnet',
13451 savefile => 'decnet.pcap',
13452 expr => 'decnet src not 1.1',
13453 results => [65535, 0, 0, 0, 0, 0, 0, 0],
13454 },
13455 {
13456 name => 'decnet_dst_not_1_1_on_decnet',
13457 savefile => 'decnet.pcap',
13458 expr => 'decnet dst not 1.1',
13459 results => [65535, 0, 0, 0, 0, 0, 0, 0],
13460 },
13461
13462 # The first result is correct from a formal point of view, but the actual
13463 # reason is the same as above.
13464 {
13465 name => 'decnet_src_63_1023_on_decnet',
13466 savefile => 'decnet.pcap',
13467 expr => 'decnet src 63.1023',
13468 results => [0, 0, 0, 0, 0, 0, 0, 0],
13469 },
13470 {
13471 name => 'decnet_dst_63_1023_on_decnet',
13472 savefile => 'decnet.pcap',
13473 expr => 'decnet dst 63.1023',
13474 results => [0, 0, 0, 0, 0, 0, 0, 0],
13475 },
13476 {
13477 name => 'decnet_src_not_63_1023_on_decnet',
13478 savefile => 'decnet.pcap',
13479 expr => 'decnet src not 63.1023',
13480 results => [65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535],
13481 },
13482 {
13483 name => 'decnet_dst_not_63_1023_on_decnet',
13484 savefile => 'decnet.pcap',
13485 expr => 'decnet dst not 63.1023',
13486 results => [65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535],
13487 },
13488
13489 # The meaning of this expression is NOT the intuitive "any DECnet packets
13490 # that do not have the source address set to 1.1", but this is not
13491 # specific to DECnet. Let's test it anyway.
13492 {
13493 name => 'decnet_src_not_1_1_on_pppoed',
13494 savefile => 'pppoe.pcap',
13495 expr => 'decnet src not 1.1',
13496 results => [1508],
13497 },
13498 {
13499 name => 'decnet_dst_not_1_1_on_pppoed',
13500 savefile => 'pppoe.pcap',
13501 expr => 'decnet dst not 1.1',
13502 results => [1508],
13503 },
13504 {
13505 name => 'decnet_src_not_63_1023_on_pppoed',
13506 savefile => 'pppoe.pcap',
13507 expr => 'decnet src not 63.1023',
13508 results => [1508],
13509 },
13510 {
13511 name => 'decnet_dst_not_63_1023_on_pppoed',
13512 savefile => 'pppoe.pcap',
13513 expr => 'decnet dst not 63.1023',
13514 results => [1508],
13515 },
13516
13517 {
13518 name => 'decnet_src_63_1023_on_pppoed',
13519 savefile => 'pppoe.pcap',
13520 expr => 'decnet src 63.1023',
13521 results => [0],
13522 },
13523 {
13524 name => 'decnet_dst_63_1023_on_pppoed',
13525 savefile => 'pppoe.pcap',
13526 expr => 'decnet src 63.1023',
13527 results => [0],
13528 },
13529
13530 {
13531 name => 'dpc_eq_1',
13532 savefile => 'isup_load_generator.pcap',
13533 expr => 'dpc == 1',
13534 results => [0, 279, 0, 279, 279, 0, 279, 0, 279, 0],
13535 },
13536 {
13537 name => 'dpc_lt_2',
13538 savefile => 'isup_load_generator.pcap',
13539 expr => 'dpc < 2',
13540 results => [0, 279, 0, 279, 279, 0, 279, 0, 279, 0],
13541 },
13542 {
13543 name => 'dpc_eq_2',
13544 savefile => 'isup_load_generator.pcap',
13545 expr => 'dpc == 2',
13546 results => [279, 0, 279, 0, 0, 279, 0, 279, 0, 279],
13547 },
13548 {
13549 name => 'dpc_gt_2',
13550 savefile => 'isup_load_generator.pcap',
13551 expr => 'dpc > 2',
13552 results => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
13553 },
13554 {
13555 name => 'dpc_le_2',
13556 savefile => 'isup_load_generator.pcap',
13557 expr => 'dpc <= 2',
13558 results => [279, 279, 279, 279, 279, 279, 279, 279, 279, 279],
13559 },
13560 {
13561 name => 'dpc_ne_0',
13562 savefile => 'isup_load_generator.pcap',
13563 expr => 'dpc != 0',
13564 results => [279, 279, 279, 279, 279, 279, 279, 279, 279, 279],
13565 },
13566 {
13567 name => 'opc_eq_2',
13568 savefile => 'isup_load_generator.pcap',
13569 expr => 'opc == 2',
13570 results => [0, 279, 0, 279, 279, 0, 279, 0, 279, 0],
13571 },
13572 {
13573 name => 'opc_ge_2',
13574 savefile => 'isup_load_generator.pcap',
13575 expr => 'opc >= 2',
13576 results => [0, 279, 0, 279, 279, 0, 279, 0, 279, 0],
13577 },
13578 {
13579 name => 'opc_gt_2',
13580 savefile => 'isup_load_generator.pcap',
13581 expr => 'opc > 2',
13582 results => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
13583 },
13584 {
13585 name => 'opc_le_2',
13586 savefile => 'isup_load_generator.pcap',
13587 expr => 'opc <= 2',
13588 results => [279, 279, 279, 279, 279, 279, 279, 279, 279, 279],
13589 },
13590 {
13591 name => 'opc_ne_0',
13592 savefile => 'isup_load_generator.pcap',
13593 expr => 'opc != 0',
13594 results => [279, 279, 279, 279, 279, 279, 279, 279, 279, 279],
13595 },
13596 {
13597 name => 'sls_eq_9',
13598 savefile => 'isup_load_generator.pcap',
13599 expr => 'sls == 9',
13600 results => [279, 279, 279, 279, 279, 279, 279, 279, 279, 279],
13601 },
13602 {
13603 name => 'sls_ne_9',
13604 savefile => 'isup_load_generator.pcap',
13605 expr => 'sls != 9',
13606 results => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
13607 },
13608 {
13609 name => 'link_host_c0_on_arcnet',
13610 savefile => 'bacnet-arcnet-linux.pcap',
13611 expr => 'link host $c0',
13612 results => [65535, 65535, 0, 65535, 65535, 65535, 65535, 65535, 65535, 0],
13613 },
13614 {
13615 name => 'link_src_host_c0_on_arcnet',
13616 savefile => 'bacnet-arcnet-linux.pcap',
13617 expr => 'link src host $c0',
13618 results => [65535, 65535, 0, 65535, 0, 65535, 0, 65535, 0, 0],
13619 },
13620 {
13621 name => 'link_dst_host_c0_on_arcnet',
13622 savefile => 'bacnet-arcnet-linux.pcap',
13623 expr => 'link dst host $c0',
13624 results => [0, 0, 0, 0, 65535, 0, 65535, 0, 65535, 0],
13625 },
13626 {
13627 name => 'link_host_not_c0_on_arcnet',
13628 savefile => 'bacnet-arcnet-linux.pcap',
13629 expr => 'link host not $c0',
13630 results => [0, 0, 65535, 0, 0, 0, 0, 0, 0, 65535],
13631 },
13632 {
13633 name => 'ip_broadcast',
13634 savefile => 'dhcp-rfc3004.pcap',
13635 netmask => '255.255.255.0',
13636 expr => 'ip broadcast',
13637 results => [262144, 0, 262144, 0],
13638 },
13639 {
13640 name => 'arp',
13641 savefile => 'isakmp4500.pcap',
13642 expr => 'arp',
13643 results => [1536, 1536, 0, 0, 0, 0, 0, 0, 0, 0],
13644 },
13645 {
13646 name => 'arp_host',
13647 savefile => 'isakmp4500.pcap',
13648 expr => 'arp host 192.1.2.254',
13649 results => [1536, 1536, 0, 0, 0, 0, 0, 0, 0, 0],
13650 },
13651 {
13652 name => 'arp_src_1',
13653 savefile => 'isakmp4500.pcap',
13654 expr => 'arp src 192.1.2.254',
13655 results => [1536, 0, 0, 0, 0, 0, 0, 0, 0, 0],
13656 },
13657 {
13658 name => 'arp_src_2',
13659 savefile => 'isakmp4500.pcap',
13660 expr => 'arp src 192.1.2.23',
13661 results => [0, 1536, 0, 0, 0, 0, 0, 0, 0, 0],
13662 },
13663 {
13664 name => 'arp_dst_1',
13665 savefile => 'isakmp4500.pcap',
13666 expr => 'arp dst 192.1.2.254',
13667 results => [0, 1536, 0, 0, 0, 0, 0, 0, 0, 0],
13668 },
13669 {
13670 name => 'arp_dst_2',
13671 savefile => 'isakmp4500.pcap',
13672 expr => 'arp dst 192.1.2.23',
13673 results => [1536, 0, 0, 0, 0, 0, 0, 0, 0, 0],
13674 },
13675 {
13676 name => 'rarp',
13677 savefile => 'rarp_req_reply.pcapng',
13678 expr => 'rarp',
13679 results => [65535, 65535],
13680 },
13681 {
13682 name => 'rarp_host_1',
13683 savefile => 'rarp_req_reply.pcapng',
13684 expr => 'rarp host 0.0.0.0',
13685 results => [65535, 0],
13686 },
13687 {
13688 name => 'rarp_host_2',
13689 savefile => 'rarp_req_reply.pcapng',
13690 expr => 'rarp host 10.1.1.100',
13691 results => [0, 65535],
13692 },
13693 {
13694 name => 'rarp_host_3',
13695 savefile => 'rarp_req_reply.pcapng',
13696 expr => 'rarp host 10.1.1.10',
13697 results => [0, 65535],
13698 },
13699 {
13700 name => 'rarp_src',
13701 savefile => 'rarp_req_reply.pcapng',
13702 expr => 'rarp src 10.1.1.10',
13703 results => [0, 65535],
13704 },
13705 {
13706 name => 'rarp_dst',
13707 savefile => 'rarp_req_reply.pcapng',
13708 expr => 'rarp dst 10.1.1.100',
13709 results => [0, 65535],
13710 },
13711 {
13712 name => 'ip_1',
13713 savefile => 'isakmp4500.pcap',
13714 expr => 'ip',
13715 results => [0, 0, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536],
13716 },
13717 {
13718 name => 'ip_2',
13719 savefile => 'vrrp.pcap',
13720 expr => 'ip',
13721 results => [0, 0, 65535, 65535, 65535, 65535, 0, 0, 65535, 65535, 65535, 0, 0, 65535, 65535]
13722 },
13723 {
13724 name => 'ip_host',
13725 savefile => 'isakmp4500.pcap',
13726 expr => 'ip host 192.1.2.23',
13727 results => [0, 0, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536],
13728 },
13729 {
13730 name => 'ip_src_1',
13731 savefile => 'isakmp4500.pcap',
13732 expr => 'ip src 192.1.2.254',
13733 results => [0, 0, 1536, 0, 1536, 0, 1536, 0, 1536, 0],
13734 },
13735 {
13736 name => 'ip_src_2',
13737 savefile => 'dhcp-rfc3004.pcap',
13738 expr => 'ip src 0.0.0.0',
13739 results => [262144, 0, 262144, 0],
13740 },
13741 {
13742 name => 'ip_dst_1',
13743 savefile => 'isakmp4500.pcap',
13744 expr => 'ip dst 192.1.2.254',
13745 results => [0, 0, 0, 1536, 0, 1536, 0, 1536, 0, 1536],
13746 },
13747 {
13748 name => 'ip_dst_2',
13749 savefile => 'dhcp-rfc3004.pcap',
13750 expr => 'ip dst 192.168.1.4',
13751 results => [0, 262144, 0, 262144],
13752 },
13753 {
13754 name => 'ip6',
13755 skip => skip_config_undef ('INET6'),
13756 savefile => 'vrrp.pcap',
13757 expr => 'ip6',
13758 results => [65535, 65535, 0, 0, 0, 0, 65535, 65535, 0, 0, 0, 65535, 65535, 0, 0],
13759 },
13760 {
13761 name => 'ip6_src_1',
13762 skip => skip_config_undef ('INET6'),
13763 savefile => 'vrrp.pcap',
13764 expr => 'ip6 src fe80::d6ca:6dff:fe66:cf60',
13765 results => [65535, 65535, 0, 0, 0, 0, 65535, 65535, 0, 0, 0, 0, 0, 0, 0],
13766 },
13767 {
13768 name => 'ip6_src_2',
13769 skip => skip_config_undef ('INET6'),
13770 savefile => 'pim-packet-assortment.pcap',
13771 expr => 'ip6 src 10::1',
13772 results => [0, 0, 0, 0, 0, 0, 0, 65535, 65535, 65535],
13773 },
13774 {
13775 name => 'ip6_dst_1',
13776 skip => skip_config_undef ('INET6'),
13777 savefile => 'vrrp.pcap',
13778 expr => 'ip6 dst ff02::12',
13779 results => [65535, 65535, 0, 0, 0, 0, 65535, 65535, 0, 0, 0, 65535, 65535, 0, 0],
13780 },
13781 {
13782 name => 'ip6_dst_2',
13783 skip => skip_config_undef ('INET6'),
13784 savefile => 'pim-packet-assortment.pcap',
13785 expr => 'ip6 dst 10::1',
13786 results => [0, 0, 0, 0, 0, 0, 65535, 0, 0, 0],
13787 },
13788 {
13789 name => 'slip_inbound_on_invalid',
13790 savefile => 'slip-bad-direction.pcap',
13791 expr => 'inbound',
13792 results => [0],
13793 },
13794 {
13795 name => 'slip_outbound_on_invalid',
13796 savefile => 'slip-bad-direction.pcap',
13797 expr => 'outbound',
13798 results => [0],
13799 },
13800 {
13801 name => 'slip_inbound_on_rx',
13802 savefile => 'slip-compressed_sl_print-oobr.pcap',
13803 expr => 'inbound',
13804 results => [46],
13805 },
13806 {
13807 name => 'slip_outbound_on_rx',
13808 savefile => 'slip-compressed_sl_print-oobr.pcap',
13809 expr => 'outbound',
13810 results => [0],
13811 },
13812 {
13813 name => 'slip_inbound_on_tx',
13814 savefile => 'slip-sliplink_print-oobr.pcap',
13815 expr => 'inbound',
13816 results => [0],
13817 },
13818 {
13819 name => 'slip_outbound_on_tx',
13820 savefile => 'slip-sliplink_print-oobr.pcap',
13821 expr => 'outbound',
13822 results => [46],
13823 },
13824 {
13825 name => 'wlan_type_mgt',
13826 savefile => 'wpa2linkuppassphraseiswireshark.pcap',
13827 expr => 'wlan type mgt',
13828 results => [65536, 65536, 65536, 65536, 65536, 65536, 65536, 0, 0, 0, 0, 0, 0, 0, 0, 65536],
13829 },
13830 {
13831 name => 'wlan_subtype_beacon',
13832 savefile => 'Network_Join_Nokia_Mobile.pcap',
13833 expr => 'wlan subtype beacon',
13834 results => [0, 0, 0, 0, 0, 0, 0, 0, 2344, 2344],
13835 },
13836 {
13837 name => 'wlan_subtype_probe_req',
13838 savefile => 'Network_Join_Nokia_Mobile.pcap',
13839 expr => 'wlan subtype probe-req',
13840 results => [2344, 0, 0, 0, 0, 0, 0, 0, 0, 0],
13841 },
13842 {
13843 name => 'wlan_subtype_probe_resp',
13844 savefile => 'Network_Join_Nokia_Mobile.pcap',
13845 expr => 'wlan subtype probe-resp',
13846 results => [0, 2344, 0, 0, 0, 0, 0, 0, 0, 0],
13847 },
13848 {
13849 name => 'wlan_subtype_auth',
13850 savefile => 'wpa2linkuppassphraseiswireshark.pcap',
13851 expr => 'wlan subtype auth',
13852 results => [0, 0, 0, 65536, 65536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
13853 },
13854 {
13855 name => 'wlan_subtype_deauth',
13856 savefile => 'Network_Join_Nokia_Mobile.pcap',
13857 expr => 'wlan subtype deauth',
13858 results => [0, 0, 0, 0, 0, 0, 2344, 0, 0, 0],
13859 },
13860 {
13861 name => 'wlan_subtype_assoc_req',
13862 savefile => 'wpa2linkuppassphraseiswireshark.pcap',
13863 expr => 'wlan subtype assoc-req',
13864 results => [0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
13865 },
13866 {
13867 name => 'wlan_subtype_assoc_resp',
13868 savefile => 'wpa2linkuppassphraseiswireshark.pcap',
13869 expr => 'wlan subtype assoc-resp',
13870 results => [0, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 0, 0, 0, 0],
13871 },
13872 {
13873 name => 'wlan_subtype_disassoc',
13874 savefile => 'wpa2linkuppassphraseiswireshark.pcap',
13875 expr => 'wlan subtype disassoc',
13876 results => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65536],
13877 },
13878 {
13879 name => 'wlan_type_ctl',
13880 savefile => 'Network_Join_Nokia_Mobile.pcap',
13881 expr => 'wlan type ctl',
13882 results => [0, 0, 0, 2344, 0, 2344, 0, 2344, 0, 0],
13883 },
13884 {
13885 name => 'wlan_subtype_ack',
13886 savefile => 'Network_Join_Nokia_Mobile.pcap',
13887 expr => 'wlan subtype ack',
13888 results => [0, 0, 0, 2344, 0, 2344, 0, 2344, 0, 0],
13889 },
13890 {
13891 name => 'wlan_subtype_cts',
13892 savefile => 'wpa-Induction.pcap',
13893 expr => 'wlan subtype cts',
13894 results => [0, 0, 0, 0, 65535, 0, 0, 65535, 0, 0],
13895 },
13896 {
13897 name => 'wlan_type_data',
13898 savefile => 'Network_Join_Nokia_Mobile.pcap',
13899 expr => 'wlan type data',
13900 results => [0, 0, 2344, 0, 2344, 0, 0, 0, 0, 0],
13901 },
13902 {
13903 name => 'wlan_subtype_qos_data',
13904 savefile => 'wpa2linkuppassphraseiswireshark.pcap',
13905 expr => 'wlan subtype qos-data',
13906 results => [0, 0, 0, 0, 0, 0, 0, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 0],
13907 },
13908 {
13909 name => 'wlan_subtype_data',
13910 savefile => 'Network_Join_Nokia_Mobile.pcap',
13911 expr => 'wlan subtype data',
13912 results => [0, 0, 2344, 0, 0, 0, 0, 0, 0, 0],
13913 },
13914 {
13915 name => 'wlan_subtype_null',
13916 savefile => 'Network_Join_Nokia_Mobile.pcap',
13917 expr => 'wlan subtype null',
13918 results => [0, 0, 0, 0, 2344, 0, 0, 0, 0, 0],
13919 },
13920 {
13921 name => 'wlan_dir_tods_IEEE802_11',
13922 savefile => 'Network_Join_Nokia_Mobile.pcap',
13923 expr => 'wlan dir tods',
13924 results => [0, 0, 2344, 0, 2344, 0, 0, 0, 0, 0],
13925 },
13926 {
13927 name => 'wlan_dir_fromds_IEEE802_11_RADIO',
13928 savefile => 'wpa2linkuppassphraseiswireshark.pcap',
13929 expr => 'wlan dir fromds',
13930 results => [0, 0, 0, 0, 0, 0, 0, 65536, 0, 65536, 0, 65536, 0, 65536, 0, 0],
13931 },
13932 {
13933 name => 'wlan_subtype_ack_PPI',
13934 savefile => 'http_PPI.pcap',
13935 expr => 'wlan subtype ack',
13936 results => [0, 65535, 0, 65535, 0],
13937 },
13938 {
13939 name => 'wlan_dir_nods_PPI',
13940 savefile => 'http_PPI.pcap',
13941 expr => 'wlan dir nods',
13942 results => [0, 65535, 0, 65535, 0],
13943 },
13944 {
13945 name => 'iso_proto_isis_EN10MB',
13946 savefile => 'ISIS_external_lsp.pcap',
13947 expr => 'iso proto \isis',
13948 results => [8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192],
13949 },
13950 {
13951 name => 'iso_proto_esis_EN10MB',
13952 savefile => 'ISIS_external_lsp.pcap',
13953 expr => 'iso proto \esis',
13954 results => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
13955 },
13956 {
13957 name => 'csnp_EN10MB',
13958 savefile => 'ISIS_external_lsp.pcap',
13959 expr => 'csnp',
13960 results => [8192, 0, 0, 0, 0, 8192, 0, 0, 0, 0],
13961 },
13962 {
13963 name => 'iso_proto_isis_C_HDLC',
13964 savefile => 'ISIS_p2p_adjacency.pcap',
13965 expr => 'iso proto \isis',
13966 results => [8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192],
13967 },
13968 {
13969 name => 'iso_proto_esis_C_HDLC',
13970 savefile => 'ISIS_p2p_adjacency.pcap',
13971 expr => 'iso proto \esis',
13972 results => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
13973 },
13974 {
13975 name => 'csnp_C_HDLC',
13976 savefile => 'ISIS_p2p_adjacency.pcap',
13977 expr => 'csnp',
13978 results => [0, 0, 0, 0, 0, 8192, 8192, 8192, 8192, 0, 0, 0, 0, 0],
13979 },
13980 {
13981 name => 'vxlan',
13982 savefile => 'vxlan.pcap',
13983 expr => 'vxlan',
13984 results => [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500],
13985 },
13986 {
13987 name => 'vxlan_100',
13988 savefile => 'vxlan.pcap',
13989 expr => 'vxlan 100',
13990 results => [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500],
13991 },
13992 {
13993 name => 'vxlan_101',
13994 savefile => 'vxlan.pcap',
13995 expr => 'vxlan 101',
13996 results => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
13997 },
13998 {
13999 name => 'geneve',
14000 savefile => 'geneve.pcap',
14001 expr => 'geneve',
14002 results => [262144, 262144, 262144, 262144, 262144, 262144, 262144, 262144, 262144, 262144],
14003 },
14004 {
14005 name => 'geneve_10',
14006 savefile => 'geneve.pcap',
14007 expr => 'geneve 10',
14008 results => [262144, 0, 0, 262144, 0, 262144, 0, 0, 262144, 0],
14009 },
14010 {
14011 name => 'geneve_11',
14012 savefile => 'geneve.pcap',
14013 expr => 'geneve 11',
14014 results => [0, 262144, 262144, 0, 262144, 0, 262144, 262144, 0, 262144],
14015 },
14016 {
14017 name => 'ip_protochain_17_deepstack',
14018 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14019 savefile => 'ipv6_ext_headers.pcap',
14020 expr => 'ip protochain 17',
14021 results => [0],
14022 },
14023 {
14024 name => 'ip6_protochain_17_deepstack',
14025 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14026 savefile => 'ipv6_ext_headers.pcap',
14027 expr => 'ip6 protochain 17',
14028 results => [65535],
14029 },
14030 {
14031 name => 'ip6_protochain_51_tunnel',
14032 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14033 savefile => 'AH-IPcomp-IPv6.pcap',
14034 expr => 'ip6 protochain 51',
14035 # AH is the first protocol header.
14036 results => [65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535],
14037 },
14038 {
14039 name => 'ip6_protochain_41_tunnel',
14040 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14041 savefile => 'AH-IPcomp-IPv6.pcap',
14042 expr => 'ip6 protochain 41',
14043 # When an IPComp header is present, it precedes the inner
14044 # IPv6 header, which no longer matches.
14045 results => [65535, 65535, 0, 0, 0, 0, 0, 65535, 0, 0, 65535, 65535, 65535, 65535, 65535],
14046 },
14047 {
14048 name => 'ip6_protochain_108_tunnel',
14049 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14050 savefile => 'AH-IPcomp-IPv6.pcap',
14051 expr => 'ip6 protochain 108',
14052 results => [0, 0, 65535, 65535, 65535, 65535, 65535, 0, 65535, 65535, 0, 0, 0, 0, 0],
14053 },
14054 {
14055 name => 'ip6_protochain_6_tunnel',
14056 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14057 savefile => 'AH-IPcomp-IPv6.pcap',
14058 expr => 'ip6 protochain 6',
14059 # All TCP packets have the TCP header behind the inner IPv6 header (41).
14060 results => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
14061 },
14062 {
14063 name => 'ip6_protochain_17_mixed',
14064 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14065 savefile => 'ipv6_ah_modes.pcap',
14066 expr => 'ip6 protochain 17',
14067 results => [65535, 0],
14068 },
14069 {
14070 name => 'ip6_protochain_41_mixed',
14071 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14072 savefile => 'ipv6_ah_modes.pcap',
14073 expr => 'ip6 protochain 41',
14074 results => [0, 65535],
14075 },
14076 {
14077 name => 'ip_protochain_51_tunnel',
14078 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14079 savefile => 'AH-IPcomp-IPv4.pcap',
14080 expr => 'ip protochain 51',
14081 results => [65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535],
14082 },
14083 {
14084 name => 'ip_protochain_4_tunnel',
14085 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14086 savefile => 'AH-IPcomp-IPv4.pcap',
14087 expr => 'ip protochain 4',
14088 results => [65535, 65535, 0, 0, 0, 65535, 0, 65535, 65535, 65535],
14089 },
14090 {
14091 name => 'ip_protochain_108_tunnel',
14092 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14093 savefile => 'AH-IPcomp-IPv4.pcap',
14094 expr => 'ip protochain 108',
14095 results => [0, 0, 65535, 65535, 65535, 0, 65535, 0, 0, 0],
14096 },
14097 {
14098 name => 'ip_protochain_51_transport',
14099 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14100 savefile => 'ah-ipip-ping.pcap',
14101 expr => 'ip protochain 51',
14102 results => [65535, 65535, 65535, 65535],
14103 },
14104 {
14105 name => 'ip_protochain_1_transport',
14106 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14107 savefile => 'ah-ipip-ping.pcap',
14108 expr => 'ip protochain 1',
14109 results => [65535, 0, 0, 0],
14110 },
14111 );
14112
14113 # * name, DLT, expr, netmask and skip: same as in accept_blocks above
14114 # * errstr (mandatory, string): a substring that must appear in standard error
14115 # from filtertest (this verifies that the reason for rejecting the expression
14116 # is what the test expects, rather than some unrelated cause).
14117 my @reject_tests = (
14118 {
14119 name => 'ether_host',
14120 DLT => 'EN10MB',
14121 expr => 'ether ab:cd:ef:0g:00:00',
14122 errstr => 'bogus ethernet address',
14123 },
14124 {
14125 name => 'pppoes_value',
14126 DLT => 'EN10MB',
14127 expr => 'pppoes 65536',
14128 errstr => 'PPPoE session number 65536 greater than maximum 65535',
14129 },
14130 {
14131 name => 'mtp2_sio',
14132 DLT => 'MTP2',
14133 expr => 'sio 256',
14134 errstr => 'sio 256 greater than maximum 255',
14135 },
14136 {
14137 name => 'mtp3_dpc',
14138 DLT => 'MTP2',
14139 expr => 'dpc 16384',
14140 errstr => 'dpc 16384 greater than maximum 16383',
14141 },
14142 {
14143 name => 'mtp3_opc',
14144 DLT => 'MTP2',
14145 expr => 'opc 16384',
14146 errstr => 'opc 16384 greater than maximum 16383',
14147 },
14148 {
14149 name => 'mtp3_sls',
14150 DLT => 'MTP2',
14151 expr => 'sls 16',
14152 errstr => 'sls 16 greater than maximum 15',
14153 },
14154 {
14155 name => 'mtp2_hsio',
14156 DLT => 'MTP2',
14157 expr => 'hsio 256',
14158 errstr => 'hsio 256 greater than maximum 255',
14159 },
14160 {
14161 name => 'mtp3_hdpc',
14162 DLT => 'MTP2',
14163 expr => 'hdpc 16384',
14164 errstr => 'hdpc 16384 greater than maximum 16383',
14165 },
14166 {
14167 name => 'mtp3_hopc',
14168 DLT => 'MTP2',
14169 expr => 'hopc 16384',
14170 errstr => 'hopc 16384 greater than maximum 16383',
14171 },
14172 {
14173 name => 'mtp3_hsls',
14174 DLT => 'MTP2',
14175 expr => 'hsls 16',
14176 errstr => 'hsls 16 greater than maximum 15',
14177 },
14178 {
14179 name => 'atm_vpi',
14180 DLT => 'SUNATM',
14181 expr => 'vpi 256',
14182 errstr => 'VPI 256 greater than maximum 255',
14183 },
14184 {
14185 name => 'atm_vci',
14186 DLT => 'SUNATM',
14187 expr => 'vci 65536',
14188 errstr => 'VCI 65536 greater than maximum 65535',
14189 },
14190 {
14191 name => 'wlan_type',
14192 DLT => 'IEEE802_11',
14193 # Type value out of range.
14194 expr => 'wlan type 16',
14195 errstr => 'invalid 802.11 type value',
14196 },
14197 {
14198 name => 'wlan_subtype',
14199 DLT => 'IEEE802_11',
14200 # Invalid syntax (numeric subtype is ambiguous and requires a type).
14201 expr => 'wlan subtype 0',
14202 errstr => 'syntax error',
14203 },
14204 {
14205 name => 'wlan_type_subtype',
14206 DLT => 'IEEE802_11',
14207 # Subtype value out of range.
14208 expr => 'wlan type 0 subtype 0xff',
14209 errstr => 'invalid 802.11 subtype value',
14210 },
14211 {
14212 name => 'wlan_dir_invalid1',
14213 DLT => 'IEEE802_11',
14214 expr => 'wlan dir abc',
14215 errstr => 'unknown 802.11 direction',
14216 },
14217 {
14218 name => 'wlan_dir_invalid2',
14219 DLT => 'IEEE802_11',
14220 expr => 'wlan dir 4',
14221 errstr => 'invalid 802.11 direction',
14222 },
14223 {
14224 name => 'pppoed_unary',
14225 DLT => 'EN10MB',
14226 expr => 'pppoed 1234',
14227 errstr => 'syntax error',
14228 },
14229 {
14230 name => 'llc_noneth',
14231 DLT => 'RAW',
14232 expr => 'llc',
14233 errstr => 'not supported',
14234 },
14235 {
14236 name => 'decnet_area',
14237 DLT => 'EN10MB',
14238 expr => 'decnet host 64.120',
14239 errstr => 'invalid DECnet address',
14240 },
14241 {
14242 name => 'decnet_node',
14243 DLT => 'EN10MB',
14244 expr => 'decnet host 17.1024',
14245 errstr => 'invalid DECnet address',
14246 },
14247 {
14248 name => 'ip_host',
14249 DLT => 'RAW',
14250 expr => 'ip host 256.256.256.256',
14251 errstr => 'invalid IPv4 address',
14252 },
14253 {
14254 name => 'ip6_host_toolong',
14255 skip => skip_config_undef ('INET6'),
14256 DLT => 'RAW',
14257 expr => 'ip6 host fe80:0:0:0:0:0:0:0:0',
14258 errstr => 'syntax error',
14259 },
14260 {
14261 name => 'ip6_host_ipv4addr',
14262 skip => skip_config_undef ('INET6'),
14263 DLT => 'RAW',
14264 expr => 'ip6 host 1.2.3.4',
14265 errstr => '\'ip6\' is not a valid qualifier for \'ip host\'',
14266 },
14267 {
14268 name => 'ip6_host_ipv4name',
14269 skip => skip_config_undef ('INET6') || skip_no_hosts(),
14270 DLT => 'RAW',
14271 expr => 'ip6 host noeth-ipv4-noipv6.host123.libpcap.test',
14272 errstr => "unknown host \'noeth-ipv4-noipv6.host123.libpcap.test' for specified address family",
14273 },
14274 # This test has been flaky because it depends on an external effect (DNS
14275 # lookup), which sometimes times out. Let's disable it until there is a good
14276 # way to address it.
14277 # {
14278 # name => 'ip6_host_nonhex',
14279 # DLT => 'RAW',
14280 # expr => 'ip6 host fe80:0:0:0:0:0:0:g',
14281 # errstr => 'unknown host',
14282 # },
14283 {
14284 name => 'ip6_host_disabled',
14285 skip => skip_config_def1 ('INET6'),
14286 DLT => 'RAW',
14287 expr => 'ip6 host fe80:0:0:0:0:0:0:0',
14288 errstr => 'not supported',
14289 },
14290 {
14291 name => 'ip_net_bits1',
14292 DLT => 'RAW',
14293 expr => 'net 192.168/8',
14294 errstr => 'non-network bits set in',
14295 },
14296 {
14297 name => 'ip_net_bits2',
14298 DLT => 'RAW',
14299 expr => 'net 192.168 mask 255.0.0.0',
14300 errstr => 'non-network bits set in',
14301 },
14302 {
14303 name => 'ip_net_nonhid1',
14304 DLT => 'RAW',
14305 expr => 'net 10 mask 255.0.0.0',
14306 errstr => 'syntax error',
14307 },
14308 {
14309 name => 'ip_net_nonhid2',
14310 DLT => 'RAW',
14311 expr => 'net 10/8',
14312 errstr => 'syntax error',
14313 },
14314 {
14315 name => 'ip_net_mask_nonhid',
14316 DLT => 'RAW',
14317 expr => 'net 10.0.0.0 mask 255',
14318 errstr => 'syntax error',
14319 },
14320 {
14321 name => 'ip_net_nonhid_mask_nonhid',
14322 DLT => 'RAW',
14323 expr => 'net 10 mask 255',
14324 errstr => 'syntax error',
14325 },
14326 {
14327 name => 'ip_net_unknown',
14328 DLT => 'EN10MB',
14329 expr => "ip net ${nonexistent}",
14330 errstr => "unknown network '${nonexistent}'",
14331 },
14332 {
14333 name => 'ip_src_net_unknown',
14334 DLT => 'EN10MB',
14335 expr => "ip src net ${nonexistent}",
14336 errstr => "unknown network '${nonexistent}'",
14337 },
14338 {
14339 name => 'ip_dst_net_unknown',
14340 DLT => 'EN10MB',
14341 expr => "ip dst net ${nonexistent}",
14342 errstr => "unknown network '${nonexistent}'",
14343 },
14344 {
14345 name => 'net_unknown',
14346 DLT => 'EN10MB',
14347 expr => "net ${nonexistent}",
14348 errstr => "unknown network '${nonexistent}'",
14349 },
14350 {
14351 name => 'src_net_unknown',
14352 DLT => 'EN10MB',
14353 expr => "src net ${nonexistent}",
14354 errstr => "unknown network '${nonexistent}'",
14355 },
14356 {
14357 name => 'dst_net_unknown',
14358 DLT => 'EN10MB',
14359 expr => "dst net ${nonexistent}",
14360 errstr => "unknown network '${nonexistent}'",
14361 },
14362 {
14363 name => 'src_or_dst_net_unknown',
14364 DLT => 'EN10MB',
14365 expr => "src or dst net ${nonexistent}",
14366 errstr => "unknown network '${nonexistent}'",
14367 },
14368 {
14369 name => 'ip6_net_prefix',
14370 skip => skip_config_undef ('INET6'),
14371 DLT => 'RAW',
14372 expr => 'ip6 net fe80:0:0:0:0:0:0:0:0/64',
14373 errstr => 'syntax error',
14374 },
14375 {
14376 name => 'ip6_net_masklen',
14377 skip => skip_config_undef ('INET6'),
14378 DLT => 'RAW',
14379 expr => 'ip6 net fe80:0:0:0:0:0:0:0/129',
14380 errstr => 'mask length must be <= 128',
14381 },
14382 {
14383 name => 'ip6_net_disabled',
14384 skip => skip_config_def1 ('INET6'),
14385 DLT => 'RAW',
14386 expr => 'ip6 net fe80:0:0:0:0:0:0:0/64',
14387 errstr => 'not supported',
14388 },
14389 {
14390 name => 'ip6_net_bits',
14391 skip => skip_config_undef ('INET6'),
14392 DLT => 'RAW',
14393 expr => 'net fe80:1234:5678::/32',
14394 errstr => 'non-network bits set in',
14395 },
14396 {
14397 name => 'tcp_port',
14398 DLT => 'IPV4',
14399 expr => 'tcp port 70000',
14400 errstr => 'illegal port number',
14401 },
14402 {
14403 name => 'udp_port',
14404 DLT => 'IPV4',
14405 expr => 'udp port 70000',
14406 errstr => 'illegal port number',
14407 },
14408 {
14409 name => 'sctp_port',
14410 DLT => 'IPV4',
14411 expr => 'sctp port 70000',
14412 errstr => 'illegal port number',
14413 },
14414 {
14415 name => 'tcp_portrange1',
14416 DLT => 'IPV4',
14417 expr => 'tcp portrange 1-70000',
14418 errstr => 'illegal port number',
14419 },
14420 {
14421 name => 'tcp_portrange2',
14422 DLT => 'IPV4',
14423 expr => 'tcp portrange 23-',
14424 errstr => 'syntax error',
14425 },
14426 {
14427 name => 'tcp_portrange3',
14428 DLT => 'IPV4',
14429 expr => 'tcp portrange -512',
14430 errstr => 'syntax error',
14431 },
14432 {
14433 name => 'tcp_portrange4',
14434 DLT => 'IPV4',
14435 expr => 'tcp portrange 70000',
14436 errstr => 'illegal port number',
14437 },
14438 {
14439 name => 'udp_portrange',
14440 DLT => 'IPV4',
14441 expr => 'udp portrange 70000-1',
14442 errstr => 'illegal port number',
14443 },
14444 {
14445 name => 'sctp_portrange',
14446 DLT => 'IPV4',
14447 expr => 'sctp portrange 70000-80000',
14448 errstr => 'illegal port number',
14449 },
14450 {
14451 name => 'pppoes_and_vlan',
14452 DLT => 'EN10MB',
14453 expr => 'pppoes and vlan',
14454 errstr => 'no VLAN support for',
14455 },
14456 {
14457 name => 'vlan_invalid_id1',
14458 DLT => 'EN10MB',
14459 expr => 'vlan 4096',
14460 errstr => 'greater than maximum',
14461 },
14462 {
14463 name => 'vlan_invalid_id2',
14464 DLT => 'EN10MB',
14465 expr => 'vlan any',
14466 errstr => 'syntax error',
14467 },
14468 {
14469 name => 'mpls_invalid_id',
14470 DLT => 'EN10MB',
14471 expr => 'mpls 1048576',
14472 errstr => 'greater than maximum',
14473 },
14474 {
14475 name => 'arcnet_address1',
14476 DLT => 'ARCNET',
14477 expr => 'link host $123',
14478 errstr => 'syntax error',
14479 },
14480 {
14481 name => 'arcnet_address2',
14482 DLT => 'ARCNET',
14483 expr => 'link host $x',
14484 errstr => 'syntax error',
14485 },
14486 {
14487 name => 'arcnet_address3',
14488 DLT => 'ARCNET',
14489 expr => 'link host $',
14490 errstr => 'syntax error',
14491 },
14492 {
14493 name => 'arcnet_address4',
14494 DLT => 'ARCNET',
14495 expr => 'link host 120',
14496 errstr => 'illegal link layer address',
14497 },
14498 {
14499 name => 'ip_broadcast_implicit',
14500 DLT => 'EN10MB',
14501 expr => 'ip broadcast',
14502 errstr => "netmask not known, so 'ip broadcast' not supported",
14503 },
14504 {
14505 name => 'ip_broadcast_explicit',
14506 DLT => 'EN10MB',
14507 netmask => '255.255.255.255',
14508 expr => 'ip broadcast',
14509 errstr => "netmask not known, so 'ip broadcast' not supported",
14510 },
14511 {
14512 name => 'arp_host_ipv4_ipv6',
14513 skip => skip_config_undef ('INET6') ||
14514 skip_no_hosts(),
14515 DLT => 'FDDI',
14516 expr => 'arp host eth-ipv4-ipv6.host123.libpcap.test',
14517 errstr => '\'arp\' is not a valid qualifier for \'ip6 host\'',
14518 },
14519 {
14520 name => 'rarp_host_ipv4_ipv6',
14521 skip => skip_config_undef ('INET6') ||
14522 skip_no_hosts(),
14523 DLT => 'FDDI',
14524 expr => 'rarp host eth-ipv4-ipv6.host123.libpcap.test',
14525 errstr => '\'rarp\' is not a valid qualifier for \'ip6 host\'',
14526 },
14527 {
14528 name => 'arp_host_noipv4_noipv6',
14529 skip => skip_no_hosts(),
14530 DLT => 'FDDI',
14531 expr => 'arp host eth-noipv4-noipv6.host123.libpcap.test',
14532 errstr => 'unknown host',
14533 },
14534 {
14535 name => 'rarp_host_noipv4_noipv6',
14536 skip => skip_no_hosts(),
14537 DLT => 'FDDI',
14538 expr => 'rarp host eth-noipv4-noipv6.host123.libpcap.test',
14539 errstr => 'unknown host',
14540 },
14541 {
14542 name => 'protochain_disabled',
14543 skip => skip_config_undef ('NO_PROTOCHAIN'),
14544 DLT => 'EN10MB',
14545 expr => 'protochain 17',
14546 errstr => 'protochain not supported',
14547 },
14548 {
14549 name => 'protochain_invalid',
14550 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14551 DLT => 'RAW',
14552 expr => 'protochain nosuchprotocol',
14553 errstr => 'unknown ip proto',
14554 },
14555 {
14556 name => 'ip_protochain_invalid',
14557 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14558 DLT => 'RAW',
14559 expr => 'ip protochain nosuchprotocol',
14560 errstr => 'unknown ip proto',
14561 },
14562 {
14563 name => 'ip6_protochain_invalid',
14564 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14565 DLT => 'RAW',
14566 expr => 'ip6 protochain nosuchprotocol',
14567 errstr => 'unknown ip proto',
14568 },
14569 {
14570 name => 'protochain_256',
14571 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14572 DLT => 'RAW',
14573 expr => 'protochain 256',
14574 errstr => 'protocol number 256 greater than maximum 255',
14575 },
14576 {
14577 name => 'ip_protochain_256',
14578 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14579 DLT => 'RAW',
14580 expr => 'ip protochain 256',
14581 errstr => 'protocol number 256 greater than maximum 255',
14582 },
14583 {
14584 name => 'ip6_protochain_256',
14585 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14586 DLT => 'RAW',
14587 expr => 'ip6 protochain 256',
14588 errstr => 'protocol number 256 greater than maximum 255',
14589 },
14590 {
14591 name => 'geneve_and_protochain_4',
14592 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14593 DLT => 'EN10MB',
14594 expr => 'geneve and protochain 4',
14595 errstr => '\'protochain\' not supported with variable length headers',
14596 },
14597 {
14598 name => 'vxlan_and_protochain_4',
14599 skip => skip_config_def1 ('NO_PROTOCHAIN'),
14600 DLT => 'EN10MB',
14601 expr => 'vxlan and protochain 4',
14602 errstr => '\'protochain\' not supported with variable length headers',
14603 },
14604 {
14605 name => 'proto_invalid',
14606 DLT => 'RAW',
14607 expr => 'proto nosuchprotocol',
14608 errstr => 'unknown ip proto',
14609 },
14610 {
14611 name => 'proto_256',
14612 DLT => 'RAW',
14613 expr => 'proto 256',
14614 errstr => 'protocol number 256 greater than maximum 255',
14615 },
14616 {
14617 name => 'ip_proto_invalid',
14618 DLT => 'RAW',
14619 expr => 'ip proto nosuchprotocol',
14620 errstr => 'unknown ip proto',
14621 },
14622 {
14623 name => 'ip_proto_256',
14624 DLT => 'RAW',
14625 expr => 'ip proto 256',
14626 errstr => 'protocol number 256 greater than maximum 255',
14627 },
14628 {
14629 name => 'ip6_proto_invalid',
14630 DLT => 'RAW',
14631 expr => 'ip6 proto nosuchprotocol',
14632 errstr => 'unknown ip proto',
14633 },
14634 {
14635 name => 'ip6_proto_256',
14636 DLT => 'RAW',
14637 expr => 'ip6 proto 256',
14638 errstr => 'protocol number 256 greater than maximum 255',
14639 },
14640 {
14641 name => 'proto_1_2_3_4',
14642 DLT => 'RAW',
14643 expr => 'proto 1.2.3.4',
14644 errstr => '\'proto\' qualifier applied to IPv4 address',
14645 },
14646 # In the tests below the hostname normally should not matter because the
14647 # lookup would be made not in the IPv4/IPv6 space, or not at all. Still
14648 # use a hostname that does not exist on the Internet, just in case.
14649 {
14650 name => 'link_host_en10mb',
14651 DLT => 'EN10MB',
14652 expr => "link host ${nonexistent}",
14653 errstr => "unknown ether host '${nonexistent}'",
14654 },
14655 {
14656 name => 'link_host_netanalyzer',
14657 DLT => 'NETANALYZER',
14658 expr => "link host ${nonexistent}",
14659 errstr => "unknown ether host '${nonexistent}'",
14660 },
14661 {
14662 name => 'link_host_netanalyzer_transparent',
14663 DLT => 'NETANALYZER_TRANSPARENT',
14664 expr => "link host ${nonexistent}",
14665 errstr => "unknown ether host '${nonexistent}'",
14666 },
14667 {
14668 name => 'link_host_fddi',
14669 DLT => 'FDDI',
14670 expr => "link host ${nonexistent}",
14671 errstr => "unknown FDDI host '${nonexistent}'",
14672 },
14673 {
14674 name => 'link_host_ieee802',
14675 DLT => 'IEEE802',
14676 expr => "link host ${nonexistent}",
14677 errstr => "unknown token ring host '${nonexistent}'",
14678 },
14679 {
14680 name => 'link_host_802_11',
14681 DLT => 'IEEE802_11',
14682 expr => "link host ${nonexistent}",
14683 errstr => "unknown 802.11 host '${nonexistent}'",
14684 },
14685 {
14686 name => 'link_host_802_11_radio',
14687 DLT => 'IEEE802_11_RADIO_AVS',
14688 expr => "link host ${nonexistent}",
14689 errstr => "unknown 802.11 host '${nonexistent}'",
14690 },
14691 {
14692 name => 'link_host_802_11_radio_avs',
14693 DLT => 'IEEE802_11_RADIO_AVS',
14694 expr => "link host ${nonexistent}",
14695 errstr => "unknown 802.11 host '${nonexistent}'",
14696 },
14697 {
14698 name => 'link_host_prism_header',
14699 DLT => 'PRISM_HEADER',
14700 expr => "link host ${nonexistent}",
14701 errstr => "unknown 802.11 host '${nonexistent}'",
14702 },
14703 {
14704 name => 'link_host_ip_over_fc',
14705 DLT => 'IP_OVER_FC',
14706 expr => "link host ${nonexistent}",
14707 errstr => "unknown Fibre Channel host '${nonexistent}'",
14708 },
14709 {
14710 name => 'link_host_other',
14711 DLT => 'ARCNET',
14712 expr => "link host ${nonexistent}",
14713 errstr => 'supports link-level host name',
14714 },
14715 {
14716 name => 'decnet_host',
14717 DLT => 'EN10MB',
14718 expr => "decnet host ${nonexistent}",
14719 errstr => "invalid DECnet address '${nonexistent}'",
14720 },
14721 # gen_scode() -> case Q_GATEWAY -> pcap_nametoaddrinfo() == NULL
14722 # Invokes bpf_error() after pcap_ether_hostton().
14723 {
14724 name => 'gateway_noipv4_noipv6',
14725 skip => skip_config_def1 ('INET6') ||
14726 skip_no_ethers(),
14727 DLT => 'EN10MB',
14728 expr => 'gateway eth-noipv4-noipv6.host123.libpcap.test',
14729 errstr => 'unknown host', # no IPv4 address in /etc/hosts
14730 },
14731 # gen_scode() -> case Q_GATEWAY -> pcap_nametoaddrinfo() == NULL
14732 # Invokes bpf_error() after pcap_ether_hostton().
14733 {
14734 name => 'gateway_noipv4_ipv6',
14735 skip => skip_config_def1 ('INET6') ||
14736 skip_no_ethers() ||
14737 skip_no_hosts(),
14738 DLT => 'EN10MB',
14739 expr => 'gateway eth-noipv4-ipv6.host123.libpcap.test',
14740 errstr => 'unknown host', # no IPv4 address in /etc/hosts
14741 },
14742 {
14743 name => 'gateway_noeth',
14744 skip => skip_config_def1 ('INET6') ||
14745 skip_no_ethers() ||
14746 skip_no_hosts(),
14747 DLT => 'EN10MB',
14748 expr => 'gateway noeth-ipv4-noipv6.host123.libpcap.test',
14749 errstr => 'unknown ether host', # not in /etc/ethers
14750 },
14751 {
14752 name => 'src_gateway',
14753 skip => skip_config_def1 ('INET6') ||
14754 skip_no_ethers() ||
14755 skip_no_hosts(),
14756 DLT => 'EN10MB',
14757 expr => 'src gateway eth-ipv4-noipv6.host123.libpcap.test',
14758 errstr => 'syntax error',
14759 },
14760 {
14761 name => 'dst_gateway',
14762 skip => skip_config_def1 ('INET6') ||
14763 skip_no_ethers() ||
14764 skip_no_hosts(),
14765 DLT => 'EN10MB',
14766 expr => 'dst gateway eth-ipv4-noipv6.host123.libpcap.test',
14767 errstr => 'syntax error',
14768 },
14769 {
14770 name => 'src_proto_NUM',
14771 DLT => 'EN10MB',
14772 expr => 'src proto 1',
14773 errstr => 'syntax error',
14774 },
14775 {
14776 name => 'dst_proto_NUM',
14777 DLT => 'EN10MB',
14778 expr => 'dst proto 1',
14779 errstr => 'syntax error',
14780 },
14781 {
14782 name => 'src_proto_ID',
14783 DLT => 'EN10MB',
14784 expr => 'src proto \tcp',
14785 errstr => 'syntax error',
14786 },
14787 {
14788 name => 'dst_proto_ID',
14789 DLT => 'EN10MB',
14790 expr => 'dst proto \tcp',
14791 errstr => 'syntax error',
14792 },
14793 {
14794 name => 'src_protochain_NUM',
14795 DLT => 'EN10MB',
14796 expr => 'src protochain 1',
14797 errstr => 'syntax error',
14798 },
14799 {
14800 name => 'dst_protochain_NUM',
14801 DLT => 'EN10MB',
14802 expr => 'dst protochain 1',
14803 errstr => 'syntax error',
14804 },
14805 {
14806 name => 'src_protochain_ID',
14807 DLT => 'EN10MB',
14808 expr => 'src protochain \tcp',
14809 errstr => 'syntax error',
14810 },
14811 {
14812 name => 'dst_protochain_ID',
14813 DLT => 'EN10MB',
14814 expr => 'dst protochain \tcp',
14815 errstr => 'syntax error',
14816 },
14817 # If "gateway" begins to support IPv6 in future, the reject tests below will
14818 # fail and will need to be replaced with accept tests.
14819 {
14820 name => 'gateway_INET6',
14821 skip => skip_config_undef ('INET6'),
14822 DLT => 'EN10MB',
14823 expr => "gateway eth-ipv4-ipv6.host123.libpcap.test",
14824 errstr => 'not supported in this configuration',
14825 },
14826 {
14827 name => 'gateway_1',
14828 skip => skip_config_def1 ('INET6'),
14829 DLT => 'EN10MB',
14830 expr => 'gateway 1',
14831 errstr => '\'gateway\' requires a name',
14832 },
14833 {
14834 name => 'gateway_1_2',
14835 skip => skip_config_def1 ('INET6'),
14836 DLT => 'EN10MB',
14837 expr => 'gateway 1.2',
14838 errstr => '\'gateway\' requires a name',
14839 },
14840 {
14841 name => 'gateway_1_2_3',
14842 skip => skip_config_def1 ('INET6'),
14843 DLT => 'EN10MB',
14844 expr => 'gateway 1.2.3',
14845 errstr => '\'gateway\' requires a name',
14846 },
14847 {
14848 name => 'gateway_1_2_3_4',
14849 skip => skip_config_def1 ('INET6'),
14850 DLT => 'EN10MB',
14851 expr => 'gateway 1.2.3.4',
14852 errstr => '\'gateway\' requires a name',
14853 },
14854 {
14855 name => 'gateway_mac48',
14856 skip => skip_config_def1 ('INET6'),
14857 DLT => 'EN10MB',
14858 expr => 'gateway 11:22:33:44:55:66',
14859 errstr => 'ethernet address used in non-ether expression',
14860 },
14861 {
14862 name => 'gateway_arcnet',
14863 skip => skip_config_def1 ('INET6'),
14864 DLT => 'EN10MB',
14865 expr => 'gateway $af',
14866 errstr => 'aid supported only on ARCnet',
14867 },
14868 {
14869 name => 'index_size_neg',
14870 DLT => 'RAW',
14871 expr => 'link[0:-1] != 0',
14872 errstr => 'syntax error',
14873 },
14874 {
14875 name => 'index_size_0',
14876 DLT => 'RAW',
14877 expr => 'link[0:0] != 0',
14878 errstr => 'data size must be 1, 2, or 4',
14879 },
14880 {
14881 name => 'index_size_3',
14882 DLT => 'RAW',
14883 expr => 'link[0:3] != 0',
14884 errstr => 'data size must be 1, 2, or 4',
14885 },
14886 {
14887 name => 'index_size_5',
14888 DLT => 'RAW',
14889 expr => 'link[0:5] != 0',
14890 errstr => 'data size must be 1, 2, or 4',
14891 },
14892 {
14893 name => 'bare_radio',
14894 DLT => 'IEEE802_11_RADIO',
14895 expr => 'radio',
14896 errstr => '\'radio\' cannot be used as an abbreviation',
14897 },
14898 {
14899 name => 'bare_link',
14900 DLT => 'IEEE802_11_RADIO',
14901 expr => 'link',
14902 errstr => '\'link\' cannot be used as an abbreviation',
14903 },
14904 {
14905 name => 'link_host_ipv4addr',
14906 DLT => 'RAW',
14907 expr => 'link host 1.2.3.4',
14908 errstr => 'illegal link layer address',
14909 },
14910 {
14911 name => 'link_net_ipv4addr',
14912 DLT => 'RAW',
14913 expr => 'link net 1.2.3.4',
14914 errstr => 'illegal link layer address',
14915 },
14916 {
14917 skip => skip_config_undef ('INET6'),
14918 name => 'link_host_ipv6addr',
14919 DLT => 'RAW',
14920 expr => 'link host fe80::',
14921 errstr => '\'link\' is not a valid qualifier for \'ip6 host\'',
14922 },
14923 {
14924 skip => skip_config_undef ('INET6'),
14925 name => 'link_net_ipv6addr',
14926 DLT => 'RAW',
14927 expr => 'link net fe80::',
14928 errstr => '\'link\' is not a valid qualifier for \'ip6 net\'',
14929 },
14930 {
14931 skip => skip_no_networks(),
14932 name => 'link_net_ipv4name',
14933 DLT => 'RAW',
14934 expr => 'link net net-10-20-30-0.libpcap.test',
14935 errstr => '\'link\' is not a valid qualifier for \'ip net\'',
14936 },
14937 {
14938 name => 'reason_invalid_PFLOG',
14939 DLT => 'PFLOG',
14940 expr => 'reason invalid',
14941 errstr => 'unknown PF reason "invalid"',
14942 },
14943 {
14944 name => 'action_invalid_PFLOG',
14945 DLT => 'PFLOG',
14946 expr => 'action invalid',
14947 errstr => 'unknown PF action "invalid"',
14948 },
14949 {
14950 name => 'iso_proto_256',
14951 DLT => 'EN10MB',
14952 expr => 'iso proto 256',
14953 errstr => 'ISO protocol 256 greater than maximum 255',
14954 },
14955 {
14956 name => 'isis_proto_32',
14957 DLT => 'EN10MB',
14958 expr => 'isis proto 32',
14959 errstr => 'IS-IS PDU type 32 greater than maximum 31',
14960 },
14961 {
14962 name => 'byte_ne',
14963 DLT => 'IPV4',
14964 expr => 'byte 1 != 2',
14965 errstr => 'syntax error',
14966 },
14967 {
14968 name => 'byte_le',
14969 DLT => 'IPV4',
14970 expr => 'byte 1 <= 2',
14971 errstr => 'syntax error',
14972 },
14973 {
14974 name => 'byte_ge',
14975 DLT => 'IPV4',
14976 expr => 'byte 1 >= 2',
14977 errstr => 'syntax error',
14978 },
14979 {
14980 name => 'byte_xor',
14981 DLT => 'IPV4',
14982 expr => 'byte 1 ^ 2',
14983 errstr => 'syntax error',
14984 },
14985 {
14986 name => 'byte_lsh',
14987 DLT => 'IPV4',
14988 expr => 'byte 1 << 2',
14989 errstr => 'syntax error',
14990 },
14991 {
14992 name => 'byte_rsh',
14993 DLT => 'IPV4',
14994 expr => 'byte 1 >> 2',
14995 errstr => 'syntax error',
14996 },
14997 {
14998 name => 'byte_eq_256',
14999 DLT => 'IPV4',
15000 expr => 'byte 1 = 256',
15001 errstr => 'byte argument 256 greater than maximum 255',
15002 },
15003 {
15004 name => 'byte_lt_256',
15005 DLT => 'IPV4',
15006 expr => 'byte 1 < 256',
15007 errstr => 'byte argument 256 greater than maximum 255',
15008 },
15009 {
15010 name => 'byte_gt_256',
15011 DLT => 'IPV4',
15012 expr => 'byte 1 > 256',
15013 errstr => 'byte argument 256 greater than maximum 255',
15014 },
15015 {
15016 name => 'byte_and_256',
15017 DLT => 'IPV4',
15018 expr => 'byte 1 & 256',
15019 errstr => 'byte argument 256 greater than maximum 255',
15020 },
15021 {
15022 name => 'byte_or_256',
15023 DLT => 'IPV4',
15024 expr => 'byte 1 | 256',
15025 errstr => 'byte argument 256 greater than maximum 255',
15026 },
15027 {
15028 name => 'vxlan_invalid',
15029 DLT => 'EN10MB',
15030 expr => 'vxlan invalid',
15031 errstr => 'syntax error',
15032 },
15033 {
15034 name => 'vxlan_123456789',
15035 DLT => 'EN10MB',
15036 expr => 'vxlan 123456789',
15037 errstr => 'VXLAN VNI 123456789 greater than maximum 16777215',
15038 },
15039 {
15040 name => 'geneve_invalid',
15041 DLT => 'EN10MB',
15042 expr => 'geneve invalid',
15043 errstr => 'syntax error',
15044 },
15045 {
15046 name => 'geneve_123456789',
15047 DLT => 'EN10MB',
15048 expr => 'geneve 123456789',
15049 errstr => 'Geneve VNI 123456789 greater than maximum 16777215',
15050 },
15051 # gen_linktype()
15052 {
15053 name => 'link_proto_65536_C_HDLC',
15054 DLT => 'C_HDLC',
15055 expr => 'link proto 65536',
15056 errstr => 'HDLC protocol 65536 greater than maximum 65535',
15057 },
15058 {
15059 name => 'link_proto_65536_PPP',
15060 DLT => 'PPP',
15061 expr => 'link proto 65536',
15062 errstr => 'PPP protocol 65536 greater than maximum 65535',
15063 },
15064 {
15065 name => 'link_proto_65536_PPP_BSDOS',
15066 DLT => 'PPP_BSDOS',
15067 expr => 'link proto 65536',
15068 errstr => 'PPP protocol 65536 greater than maximum 65535',
15069 },
15070 {
15071 name => 'link_proto_65536_APPLE_IP_OVER_IEEE1394',
15072 DLT => 'APPLE_IP_OVER_IEEE1394', # the default case
15073 expr => 'link proto 65536',
15074 errstr => 'EtherType 65536 greater than maximum 65535',
15075 },
15076 # gen_ether_linktype()
15077 {
15078 name => 'link_proto_65536_EN10MB',
15079 DLT => 'EN10MB',
15080 expr => 'link proto 65536',
15081 errstr => 'EtherType 65536 greater than maximum 65535',
15082 },
15083 {
15084 name => 'link_proto_1500_EN10MB',
15085 DLT => 'EN10MB',
15086 expr => 'link proto 1500',
15087 errstr => 'LLC DSAP 1500 greater than maximum 255',
15088 },
15089 # gen_llc_linktype
15090 {
15091 name => 'link_proto_65536_IP_OVER_FC',
15092 DLT => 'IP_OVER_FC',
15093 expr => 'link proto 65536',
15094 errstr => 'EtherType 65536 greater than maximum 65535',
15095 },
15096 {
15097 name => 'link_proto_1500_IP_OVER_FC',
15098 DLT => 'IP_OVER_FC',
15099 expr => 'link proto 1500',
15100 errstr => 'LLC DSAP 1500 greater than maximum 255',
15101 },
15102 # gen_linux_sll_linktype
15103 {
15104 name => 'link_proto_65536_LINUX_SLL',
15105 DLT => 'LINUX_SLL',
15106 expr => 'link proto 65536',
15107 errstr => 'EtherType 65536 greater than maximum 65535',
15108 },
15109 {
15110 name => 'link_proto_1500_LINUX_SLL',
15111 DLT => 'LINUX_SLL',
15112 expr => 'link proto 1500',
15113 errstr => 'LLC DSAP 1500 greater than maximum 255',
15114 },
15115 );
15116
15117 # "proto" qualifiers without any lexer-level aliases (the entries correspond
15118 # to Q_LINK~Q_CARP from gencode.h and are ordered by name).
15119 my %pqual_features = (
15120 aarp => {
15121 },
15122 ah => {
15123 },
15124 arp => {
15125 index => 1,
15126 host => 1,
15127 gateway => 1,
15128 },
15129 atalk => {
15130 index => 1,
15131 },
15132 carp => {
15133 index => 1,
15134 },
15135 clnp => {
15136 },
15137 csnp => {
15138 },
15139 decnet => {
15140 index => 1,
15141 host => 1,
15142 },
15143 esis => {
15144 },
15145 esp => {
15146 },
15147 icmp => {
15148 index => 1,
15149 },
15150 icmp6 => {
15151 index => 1,
15152 },
15153 igmp => {
15154 index => 1,
15155 },
15156 igrp => {
15157 index => 1,
15158 },
15159 iih => {
15160 },
15161 ip => {
15162 index => 1,
15163 host => 1,
15164 gateway => 1,
15165 protochain => 1,
15166 proto => 1,
15167 },
15168 ip6 => {
15169 index => 1,
15170 host => 1,
15171 protochain => 1,
15172 proto => 1,
15173 },
15174 ipx => {
15175 },
15176 isis => {
15177 proto => 1,
15178 },
15179 iso => {
15180 proto => 1,
15181 },
15182 l1 => {
15183 },
15184 l2 => {
15185 },
15186 lat => {
15187 index => 1,
15188 },
15189 link => {
15190 index => 1,
15191 host => 1,
15192 proto => 1,
15193 },
15194 lsp => {
15195 },
15196 mopdl => {
15197 index => 1,
15198 },
15199 moprc => {
15200 index => 1,
15201 },
15202 netbeui => {
15203 },
15204 pim => {
15205 index => 1,
15206 },
15207 psnp => {
15208 },
15209 radio => {
15210 index => 1,
15211 },
15212 rarp => {
15213 index => 1,
15214 host => 1,
15215 gateway => 1,
15216 },
15217 sca => {
15218 index => 1,
15219 },
15220 sctp => {
15221 index => 1,
15222 },
15223 snp => {
15224 },
15225 stp => {
15226 },
15227 tcp => {
15228 index => 1,
15229 },
15230 udp => {
15231 index => 1,
15232 },
15233 vrrp => {
15234 index => 1,
15235 },
15236 );
15237
15238 sub item_with_without {
15239 my $hashref = shift;
15240 my $feature = shift;
15241 my $wanted_with = shift;
15242 my $actual_with = exists $hashref->{$feature} && $hashref->{$feature} == 1;
15243 return $wanted_with == $actual_with;
15244 }
15245
15246 sub list_with_without {
15247 my $hohref = shift;
15248 my $feature = shift;
15249 my $wanted_with = shift;
15250 my @ret;
15251 foreach (sort keys %$hohref) {
15252 next unless item_with_without $hohref->{$_}, $feature, $wanted_with;
15253 push @ret, $_;
15254 last if $only_short;
15255 }
15256 return @ret;
15257 }
15258
15259 sub pquals_with {
15260 return list_with_without \%pqual_features, shift, 1;
15261 }
15262
15263 sub pquals_without {
15264 return list_with_without \%pqual_features, shift, 0;
15265 }
15266
15267 # "dir" qualifiers
15268 my %dqual_features = (
15269 src => {
15270 },
15271 dst => {
15272 },
15273 'src or dst' => {
15274 },
15275 'src and dst' => {
15276 },
15277 addr1 => {
15278 wlan => 1,
15279 },
15280 addr2 => {
15281 wlan => 1,
15282 },
15283 addr3 => {
15284 wlan => 1,
15285 },
15286 addr4 => {
15287 wlan => 1,
15288 },
15289 ra => {
15290 wlan => 1,
15291 },
15292 ta => {
15293 wlan => 1,
15294 },
15295 );
15296
15297 sub dquals_with {
15298 return list_with_without \%dqual_features, shift, 1;
15299 }
15300
15301 sub dquals_without {
15302 return list_with_without \%dqual_features, shift, 0;
15303 }
15304
15305 # All DLTs pcap_datalink_name_to_val() recognizes, ordered by name.
15306 my %DLTfeatures = (
15307 A429 => {
15308 },
15309 A653_ICM => {
15310 },
15311 AOS => {
15312 },
15313 APPLE_IP_OVER_IEEE1394 => {
15314 link_proto => 1, # gen_linktype() default case
15315 },
15316 ARCNET => {
15317 link_proto => 1,
15318 link_broadcast => 1,
15319 link_multicast => 1,
15320 link_host_mac8 => 1,
15321 },
15322 ARCNET_LINUX => {
15323 link_proto => 1,
15324 link_broadcast => 1,
15325 link_multicast => 1,
15326 link_host_mac8 => 1,
15327 },
15328 ATM_CLIP => {
15329 link_proto => 1,
15330 },
15331 ATM_RFC1483 => {
15332 link_proto => 1,
15333 llc => 1,
15334 },
15335 ATSC_ALP => {
15336 },
15337 AUERSWALD_LOG => {
15338 },
15339 AX25_KISS => {
15340 },
15341 BACNET_MS_TP => {
15342 link_proto => 1,
15343 },
15344 BLUETOOTH_BREDR_BB => {
15345 },
15346 BLUETOOTH_HCI_H4 => {
15347 },
15348 BLUETOOTH_HCI_H4_WITH_PHDR => {
15349 },
15350 BLUETOOTH_LE_LL => {
15351 },
15352 BLUETOOTH_LE_LL_WITH_PHDR => {
15353 },
15354 BLUETOOTH_LINUX_MONITOR => {
15355 },
15356 CAN20B => {
15357 },
15358 CAN_SOCKETCAN => {
15359 },
15360 C_HDLC => {
15361 link_proto => 1,
15362 mpls => 1,
15363 },
15364 DBUS => {
15365 },
15366 DECT => {
15367 },
15368 DECT_NR => {
15369 },
15370 DISPLAYPORT_AUX => {
15371 },
15372 DOCSIS => {
15373 },
15374 DOCSIS31_XRA31 => {
15375 },
15376 DSA_TAG_BRCM => {
15377 },
15378 DSA_TAG_BRCM_PREPEND => {
15379 },
15380 DSA_TAG_DSA => {
15381 },
15382 DSA_TAG_EDSA => {
15383 },
15384 DVB_CI => {
15385 },
15386 EBHSCR => {
15387 },
15388 ELEE => {
15389 },
15390 EN10MB => {
15391 link_proto => 1,
15392 link_broadcast => 1,
15393 link_multicast => 1,
15394 link_host_mac48 => 1,
15395 vlan => 1,
15396 mpls => 1,
15397 llc => 1,
15398 },
15399 ENC => {
15400 link_proto => 1,
15401 },
15402 EPON => {
15403 },
15404 ERF => {
15405 ss7 => 1,
15406 },
15407 ERF_ETH => {
15408 },
15409 ERF_POS => {
15410 },
15411 ETHERNET_MPACKET => {
15412 },
15413 ETW => {
15414 },
15415 FC_2 => {
15416 },
15417 FC_2_WITH_FRAME_DELIMS => {
15418 },
15419 FDDI => {
15420 link_proto => 1,
15421 link_broadcast => 1,
15422 link_multicast => 1,
15423 link_host_mac48 => 1,
15424 llc => 1,
15425 },
15426 FIRA_UCI => {
15427 },
15428 FRELAY => {
15429 link_proto => 1,
15430 },
15431 GPF_F => {
15432 },
15433 GPF_T => {
15434 },
15435 GPRS_LLC => {
15436 },
15437 I2C_LINUX => {
15438 },
15439 IEEE802 => {
15440 link_proto => 1,
15441 link_broadcast => 1,
15442 link_multicast => 1,
15443 link_host_mac48 => 1,
15444 llc => 1,
15445 },
15446 IEEE802_11 => {
15447 link_proto => 1,
15448 link_broadcast => 1,
15449 link_multicast => 1,
15450 link_host_mac48 => 1,
15451 vlan => 1,
15452 llc => 1,
15453 wlan => 1,
15454 var_off_linkpl => 1,
15455 },
15456 IEEE802_11_RADIO => {
15457 link_proto => 1,
15458 link_broadcast => 1,
15459 link_multicast => 1,
15460 link_host_mac48 => 1,
15461 vlan => 1,
15462 llc => 1,
15463 wlan => 1,
15464 var_off_linkpl => 1,
15465 },
15466 IEEE802_11_RADIO_AVS => {
15467 link_proto => 1,
15468 link_broadcast => 1,
15469 link_multicast => 1,
15470 link_host_mac48 => 1,
15471 vlan => 1,
15472 llc => 1,
15473 wlan => 1,
15474 var_off_linkpl => 1,
15475 },
15476 IEEE802_15_4 => {
15477 },
15478 IEEE802_15_4_LINUX => {
15479 },
15480 IEEE802_15_4_NOFCS => {
15481 },
15482 IEEE802_15_4_NONASK_PHY => {
15483 },
15484 IEEE802_15_4_TAP => {
15485 },
15486 IEEE802_16_MAC_CPS => {
15487 },
15488 IEEE802_16_MAC_CPS_RADIO => {
15489 },
15490 INFINIBAND => {
15491 },
15492 IPMB_KONTRON => {
15493 },
15494 IPMI_HPM_2 => {
15495 },
15496 IPNET => {
15497 link_proto => 1,
15498 inout => 1,
15499 },
15500 IPOIB => {
15501 },
15502 IP_OVER_FC => {
15503 link_proto => 1,
15504 link_broadcast => 1,
15505 link_multicast => 1,
15506 link_host_mac48 => 1,
15507 },
15508 IPV4 => {
15509 link_proto => 1,
15510 },
15511 IPV6 => {
15512 link_proto => 1,
15513 },
15514 ISO_14443 => {
15515 },
15516 JUNIPER_ATM1 => {
15517 link_proto => 1,
15518 inout => 1,
15519 },
15520 JUNIPER_ATM2 => {
15521 link_proto => 1,
15522 inout => 1,
15523 },
15524 JUNIPER_ATM_CEMIC => {
15525 link_proto => 1,
15526 inout => 1,
15527 },
15528 JUNIPER_CHDLC => {
15529 link_proto => 1,
15530 inout => 1,
15531 },
15532 JUNIPER_ES => {
15533 link_proto => 1,
15534 inout => 1,
15535 },
15536 JUNIPER_ETHER => {
15537 link_proto => 1,
15538 inout => 1,
15539 },
15540 JUNIPER_FIBRECHANNEL => {
15541 link_proto => 1,
15542 inout => 1,
15543 },
15544 JUNIPER_FRELAY => {
15545 link_proto => 1,
15546 inout => 1,
15547 },
15548 JUNIPER_GGSN => {
15549 link_proto => 1,
15550 inout => 1,
15551 },
15552 JUNIPER_ISM => {
15553 link_proto => 1,
15554 inout => 1,
15555 },
15556 JUNIPER_MFR => {
15557 link_proto => 1,
15558 inout => 1,
15559 },
15560 JUNIPER_MLFR => {
15561 link_proto => 1,
15562 inout => 1,
15563 },
15564 JUNIPER_MLPPP => {
15565 link_proto => 1,
15566 inout => 1,
15567 },
15568 JUNIPER_MONITOR => {
15569 link_proto => 1,
15570 inout => 1,
15571 },
15572 JUNIPER_PIC_PEER => {
15573 },
15574 JUNIPER_PPP => {
15575 link_proto => 1,
15576 inout => 1,
15577 },
15578 JUNIPER_PPPOE => {
15579 link_proto => 1,
15580 inout => 1,
15581 },
15582 JUNIPER_PPPOE_ATM => {
15583 link_proto => 1,
15584 inout => 1,
15585 },
15586 JUNIPER_SERVICES => {
15587 link_proto => 1,
15588 inout => 1,
15589 },
15590 JUNIPER_SRX_E2E => {
15591 link_proto => 1,
15592 inout => 1,
15593 },
15594 JUNIPER_ST => {
15595 link_proto => 1,
15596 inout => 1,
15597 },
15598 JUNIPER_VP => {
15599 link_proto => 1,
15600 inout => 1,
15601 },
15602 JUNIPER_VS => {
15603 link_proto => 1,
15604 inout => 1,
15605 },
15606 LINUX_EVDEV => {
15607 },
15608 LINUX_IRDA => {
15609 },
15610 LINUX_LAPD => {
15611 },
15612 LINUX_SLL => {
15613 link_proto => 1,
15614 inout => 1,
15615 },
15616 LINUX_SLL2 => {
15617 link_proto => 1, # gen_linktype() default case
15618 inout => 1,
15619 ifindex => 1,
15620 },
15621 LOOP => {
15622 link_proto => 1,
15623 },
15624 LTALK => {
15625 link_proto => 1,
15626 },
15627 MDB => {
15628 },
15629 MFR => {
15630 },
15631 MPEG_2_TS => {
15632 },
15633 MPLS => {
15634 },
15635 MTP2 => {
15636 ss7 => 1,
15637 },
15638 MTP2_WITH_PHDR => {
15639 ss7 => 1,
15640 },
15641 MTP3 => {
15642 },
15643 MUX27010 => {
15644 },
15645 NETANALYZER => {
15646 link_proto => 1,
15647 link_broadcast => 1,
15648 link_multicast => 1,
15649 link_host_mac48 => 1,
15650 vlan => 1,
15651 mpls => 1,
15652 },
15653 NETANALYZER_NG => {
15654 },
15655 NETANALYZER_TRANSPARENT => {
15656 link_proto => 1,
15657 link_broadcast => 1,
15658 link_multicast => 1,
15659 link_host_mac48 => 1,
15660 vlan => 1,
15661 mpls => 1,
15662 },
15663 NETLINK => {
15664 },
15665 NFC_LLCP => {
15666 },
15667 NFLOG => {
15668 },
15669 NG40 => {
15670 },
15671 NORDIC_BLE => {
15672 },
15673 NULL => {
15674 link_proto => 1,
15675 },
15676 OPENFLOW => {
15677 },
15678 OPENVIZSLA => {
15679 },
15680 PFLOG => {
15681 link_proto => 1,
15682 inout => 1,
15683 pflog => 1,
15684 },
15685 PFSYNC => {
15686 },
15687 PKTAP => {
15688 },
15689 PPI => {
15690 link_proto => 1,
15691 link_broadcast => 1,
15692 link_multicast => 1,
15693 link_host_mac48 => 1,
15694 llc => 1,
15695 wlan => 1,
15696 var_off_linkpl => 1,
15697 },
15698 PPP => {
15699 link_proto => 1,
15700 mpls => 1,
15701 },
15702 PPP_BSDOS => {
15703 link_proto => 1,
15704 },
15705 PPP_ETHER => {
15706 link_proto => 1,
15707 },
15708 PPP_PPPD => {
15709 link_proto => 1,
15710 inout => 1,
15711 },
15712 PPP_SERIAL => {
15713 link_proto => 1,
15714 },
15715 PRISM_HEADER => {
15716 link_proto => 1,
15717 link_broadcast => 1,
15718 link_multicast => 1,
15719 link_host_mac48 => 1,
15720 vlan => 1,
15721 llc => 1,
15722 wlan => 1,
15723 var_off_linkpl => 1,
15724 },
15725 PROFIBUS_DL => {
15726 },
15727 RAIF1 => {
15728 },
15729 RAW => {
15730 link_proto => 1,
15731 },
15732 RDS => {
15733 },
15734 RTAC_SERIAL => {
15735 },
15736 SCCP => {
15737 },
15738 SCTP => {
15739 },
15740 SDLC => {
15741 },
15742 SILABS_DEBUG_CHANNEL => {
15743 },
15744 SITA => {
15745 },
15746 SLIP => {
15747 link_proto => 1,
15748 inout => 1,
15749 },
15750 SLIP_BSDOS => {
15751 link_proto => 1,
15752 },
15753 STANAG_5066_D_PDU => {
15754 },
15755 SUNATM => {
15756 link_proto => 1,
15757 llc => 1,
15758 atm => 1,
15759 },
15760 SYMANTEC_FIREWALL => {
15761 link_proto => 1, # gen_linktype() default case
15762 },
15763 TI_LLN_SNIFFER => {
15764 },
15765 USB_2_0 => {
15766 },
15767 USB_2_0_FULL_SPEED => {
15768 },
15769 USB_2_0_HIGH_SPEED => {
15770 },
15771 USB_2_0_LOW_SPEED => {
15772 },
15773 USB_DARWIN => {
15774 },
15775 USB_FREEBSD => {
15776 },
15777 USB_LINUX => {
15778 },
15779 USB_LINUX_MMAPPED => {
15780 },
15781 USBPCAP => {
15782 },
15783 VPP_DISPATCH => {
15784 },
15785 VSOCK => {
15786 },
15787 WATTSTOPPER_DLM => {
15788 },
15789 WIHART => {
15790 },
15791 ZBOSS_NCP => {
15792 },
15793 ZWAVE_R1_R2 => {
15794 },
15795 ZWAVE_R3 => {
15796 },
15797 Z_WAVE_SERIAL => {
15798 },
15799 ZWAVE_TAP => {
15800 },
15801 );
15802
15803 sub DLTs_with {
15804 return list_with_without \%DLTfeatures, shift, 1;
15805 }
15806
15807 sub DLTs_without {
15808 return list_with_without \%DLTfeatures, shift, 0;
15809 }
15810
15811 sub DLT_feature {
15812 my $name = shift;
15813 my $feature = shift;
15814 return item_with_without $DLTfeatures{$name}, $feature, 1;
15815 }
15816
15817 # gen_load_internal() -> default
15818 foreach (pquals_without 'index') {
15819 push @reject_tests, {
15820 name => "noindex_${_}",
15821 DLT => 'EN10MB',
15822 expr => "${_}[0] == 0",
15823 errstr => "'${_}' does not support the index operation",
15824 };
15825 }
15826
15827 # "link host IPV4ADDR" and "link net IPV4ADDR" use a different code path with
15828 # a different error message and are tested above. "link net NAME" uses yet
15829 # another different code path with yet another different error message and is
15830 # tested above. "(link|ip|rarp|arp|decnet|ip6) host" can be valid syntax or
15831 # not (depending on the primitive ID), which is tested above.
15832 foreach (pquals_without 'host') {
15833 # HID -> gen_ncode() -> gen_host() -> default
15834 push @reject_tests, {
15835 name => "inv_qual_${_}_host_ipv4addr",
15836 DLT => 'EN10MB',
15837 expr => "${_} host 1.2.3.4",
15838 errstr => "'${_}' is not a valid qualifier for 'ip host'",
15839 };
15840 # HID -> gen_ncode() -> gen_host() -> default
15841 push @reject_tests, {
15842 name => "inv_qual_${_}_net_ipv4addr",
15843 DLT => 'EN10MB',
15844 expr => "${_} net 1.2.3.4",
15845 errstr => "'${_}' is not a valid qualifier for 'ip net'",
15846 };
15847 # HID6 -> gen_mcode6() -> gen_host6() -> default
15848 push @reject_tests, {
15849 skip => skip_config_undef ('INET6'),
15850 name => "inv_qual_${_}_host_ipv6addr",
15851 DLT => 'EN10MB',
15852 expr => "${_} host fe80::",
15853 errstr => "'${_}' is not a valid qualifier for 'ip6 host'",
15854 };
15855 # HID6 -> gen_mcode6() -> gen_host6() -> default
15856 push @reject_tests, {
15857 skip => skip_config_undef ('INET6'),
15858 name => "inv_qual_${_}_net_ipv6addr",
15859 DLT => 'EN10MB',
15860 expr => "${_} net fe80::",
15861 errstr => "'${_}' is not a valid qualifier for 'ip6 net'",
15862 };
15863
15864 # HID NETMASK HID -> gen_mcode() -> default
15865 push @reject_tests, {
15866 name => "inv_qual_${_}_host_ipv4mask",
15867 DLT => 'EN10MB',
15868 expr => "${_} host 1.2.3.0 mask 255.255.255.0",
15869 errstr => 'Mask syntax for networks only',
15870 };
15871 # HID NETMASK HID -> gen_mcode() -> gen_host() -> default
15872 push @reject_tests, {
15873 name => "inv_qual_${_}_net_ipv4mask",
15874 DLT => 'EN10MB',
15875 expr => "${_} net 1.2.3.0 mask 255.255.255.0",
15876 errstr => "'${_}' is not a valid qualifier for 'ip net'",
15877 };
15878 # ("mask" is IPv4-only)
15879
15880 # HID '/' NUM -> gen_mcode() -> default
15881 push @reject_tests, {
15882 name => "inv_qual_${_}_host_ipv4cidr",
15883 DLT => 'EN10MB',
15884 expr => "${_} host 1.2.3.0/24",
15885 errstr => 'Mask syntax for networks only',
15886 };
15887 # HID '/' NUM -> gen_mcode() -> gen_host() -> default
15888 push @reject_tests, {
15889 name => "inv_qual_${_}_net_ipv4cidr",
15890 DLT => 'EN10MB',
15891 expr => "${_} net 1.2.3.0/24",
15892 errstr => "'${_}' is not a valid qualifier for 'ip net'",
15893 };
15894 # HID6 '/' NUM -> gen_mcode6() -> default
15895 push @reject_tests, {
15896 skip => skip_config_undef ('INET6'),
15897 name => "inv_qual_${_}_host_ipv6cidr",
15898 DLT => 'EN10MB',
15899 expr => "${_} host fe80::/16",
15900 errstr => 'Mask syntax for networks only',
15901 };
15902 # HID6 '/' NUM -> gen_mcode6() -> gen_host6() -> default
15903 push @reject_tests, {
15904 skip => skip_config_undef ('INET6'),
15905 name => "inv_qual_${_}_net_ipv6cidr",
15906 DLT => 'EN10MB',
15907 expr => "${_} net fe80::/16",
15908 errstr => "'${_}' is not a valid qualifier for 'ip6 net'",
15909 };
15910
15911 # ID -> gen_scode() -> gen_host() -> default
15912 push @reject_tests, {
15913 skip => skip_no_hosts(),
15914 name => "inv_qual_${_}_host_ipv4name",
15915 DLT => 'EN10MB',
15916 expr => "${_} host noeth-ipv4-noipv6.host123.libpcap.test",
15917 errstr => "'${_}' is not a valid qualifier for 'ip host'",
15918 };
15919 # ID -> gen_scode() -> gen_host() -> default
15920 push @reject_tests, {
15921 skip => skip_no_networks(),
15922 name => "inv_qual_${_}_net_ipv4name",
15923 DLT => 'EN10MB',
15924 expr => "${_} net net-10-20-30-0.libpcap.test",
15925 errstr => "'${_}' is not a valid qualifier for 'ip net'",
15926 };
15927 # ID -> gen_scode() -> gen_host6() -> default
15928 push @reject_tests, {
15929 skip => skip_config_undef ('INET6') || skip_no_hosts(),
15930 name => "inv_qual_${_}_host_ipv6name",
15931 DLT => 'EN10MB',
15932 expr => "${_} host noeth-noipv4-ipv6.host123.libpcap.test",
15933 errstr => "'${_}' is not a valid qualifier for 'ip6 host'",
15934 };
15935 # (IPv6 networks cannot have names)
15936 }
15937
15938 # ID -> gen_scode() -> case Q_GATEWAY -> gen_gateway() -> default
15939 # Invokes bpf_error() after pcap_ether_hostton().
15940 foreach (pquals_without 'gateway') {
15941 push @reject_tests, {
15942 skip => skip_config_def1 ('INET6') ||
15943 skip_no_ethers() ||
15944 skip_no_hosts(),
15945 name => "inv_qual_${_}_gateway_ipv4name",
15946 DLT => 'EN10MB',
15947 expr => "${_} gateway eth-ipv4-noipv6.host123.libpcap.test",
15948 errstr => "'${_}' is not a valid qualifier for 'gateway'",
15949 };
15950 }
15951
15952 foreach (DLTs_without 'link_host_mac48') {
15953 # ID -> gen_scode() -> case Q_GATEWAY -> gen_gateway() -> case Q_DEFAULT -> default
15954 # Invokes bpf_error() after pcap_ether_hostton().
15955 push @reject_tests, {
15956 name => "gateway_ipv4_noipv6_${_}",
15957 skip => skip_config_def1 ('INET6') ||
15958 skip_no_ethers() ||
15959 skip_no_hosts(),
15960 DLT => $_,
15961 expr => 'gateway eth-ipv4-noipv6.host123.libpcap.test',
15962 errstr => '\'gateway\' supported only on',
15963 };
15964 # ID -> gen_scode() -> case Q_GATEWAY -> gen_gateway() -> case Q_DEFAULT -> default
15965 # Invokes bpf_error() after pcap_ether_hostton().
15966 push @reject_tests, {
15967 name => "gateway_ipv4_ipv6_${_}",
15968 skip => skip_config_def1 ('INET6') ||
15969 skip_no_ethers() ||
15970 skip_no_hosts(),
15971 DLT => $_,
15972 expr => 'gateway eth-ipv4-ipv6.host123.libpcap.test',
15973 errstr => '\'gateway\' supported only on',
15974 };
15975 }
15976
15977 foreach my $pq (pquals_without '') {
15978 # HID -> gen_ncode() -> case Q_GATEWAY
15979 push @reject_tests, {
15980 name => "${pq}_gateway_HID",
15981 skip => skip_config_def1 ('INET6'),
15982 DLT => 'EN10MB',
15983 expr => "$pq gateway 11.12.13.14",
15984 errstr => $pq eq 'decnet' ?
15985 'invalid DECnet address \'11.12.13.14\'' :
15986 '\'gateway\' requires a name',
15987 };
15988 # HID
15989 push @reject_tests, {
15990 name => "${pq}_${_}_HID",
15991 skip => $_ eq 'protochain' ? skip_config_def1 ('NO_PROTOCHAIN') : '',
15992 DLT => 'EN10MB',
15993 expr => "$pq $_ 11.12.13.14",
15994 errstr => "'$_' qualifier applied to IPv4 address",
15995 } foreach qw(port portrange proto protochain);
15996 # HID '/' NUM -> gen_mcode() -> default
15997 push @reject_tests, {
15998 name => "${pq}_gateway_HID_NUM",
15999 DLT => 'EN10MB',
16000 expr => "$pq gateway 11.12.0.0/16",
16001 errstr => 'Mask syntax for networks only',
16002 };
16003 # HID '/' NUM
16004 push @reject_tests, {
16005 name => "${pq}_${_}_HID_NUM",
16006 skip => $_ eq 'protochain' ? skip_config_def1 ('NO_PROTOCHAIN') : '',
16007 DLT => 'EN10MB',
16008 expr => "$pq $_ 11.12.0.0/16",
16009 errstr => "'$_' qualifier applied to IPv4 address and prefix length",
16010 } foreach qw(port portrange proto protochain);
16011 # HID NETMASK HID -> gen_mcode() -> default
16012 push @reject_tests, {
16013 name => "${pq}_gateway_HID_mask_HID",
16014 DLT => 'EN10MB',
16015 expr => "$pq gateway 11.12.0.0 mask 255.255.0.0",
16016 errstr => 'Mask syntax for networks only',
16017 };
16018 # HID NETMASK HID
16019 push @reject_tests, {
16020 name => "${pq}_${_}_HID_mask_HID",
16021 skip => $_ eq 'protochain' ? skip_config_def1 ('NO_PROTOCHAIN') : '',
16022 DLT => 'EN10MB',
16023 expr => "$pq $_ 11.12.0.0 mask 255.255.0.0",
16024 errstr => "'$_' qualifier applied to IPv4 address and netmask",
16025 } foreach qw(port portrange proto protochain);
16026 # HID6 -> gen_mcode6() -> default
16027 push @reject_tests, {
16028 name => "${pq}_gateway_HID6",
16029 skip => skip_config_undef ('INET6'),
16030 DLT => 'EN10MB',
16031 expr => "$pq gateway fe80::0",
16032 errstr => 'invalid qualifier against IPv6 address',
16033 };
16034 # HID6
16035 push @reject_tests, {
16036 name => "${pq}_${_}_HID6",
16037 skip => $_ eq 'protochain' ?
16038 (skip_config_def1 ('NO_PROTOCHAIN') || skip_config_undef ('INET6')) :
16039 skip_config_undef ('INET6'),
16040 DLT => 'EN10MB',
16041 expr => "$pq $_ fe80::0",
16042 errstr => "'$_' qualifier applied to IPv6 address",
16043 } foreach qw(port portrange proto protochain);
16044 # HID6 '/' NUM -> gen_mcode6() -> default
16045 push @reject_tests, {
16046 name => "${pq}_gateway_HID6_NUM",
16047 skip => skip_config_undef ('INET6'),
16048 DLT => 'EN10MB',
16049 expr => "$pq gateway fe80::0/64",
16050 errstr => 'invalid qualifier against IPv6 address',
16051 };
16052 # HID6 '/' NUM
16053 push @reject_tests, {
16054 name => "${pq}_${_}_HID6_NUM",
16055 skip => $_ eq 'protochain' ?
16056 (skip_config_def1 ('NO_PROTOCHAIN') || skip_config_undef ('INET6')) :
16057 skip_config_undef ('INET6'),
16058 DLT => 'EN10MB',
16059 expr => "$pq $_ fe80::0/64",
16060 errstr => "'$_' qualifier applied to IPv6 address and prefix length",
16061 } foreach qw(port portrange proto protochain);
16062 last if $only_short;
16063 }
16064
16065 foreach (pquals_without 'protochain') {
16066 # pnum -> gen_ncode() -> case Q_PROTOCHAIN -> gen_protochain() -> default
16067 push @reject_tests, {
16068 name => "${_}_protochain_17",
16069 skip => skip_config_def1 ('NO_PROTOCHAIN'),
16070 DLT => 'EN10MB',
16071 expr => "${_} protochain 17",
16072 errstr => $_ eq 'decnet' ?
16073 'invalid DECnet address \'17\'' :
16074 "'${_}' is not a valid qualifier for 'protochain'",
16075 };
16076 # ID -> gen_scode() -> case Q_PROTOCHAIN -> lookup_proto()
16077 push @reject_tests, {
16078 name => "${_}_protochain_tcp",
16079 skip => skip_config_def1 ('NO_PROTOCHAIN'),
16080 DLT => 'EN10MB',
16081 expr => "${_} protochain \\tcp",
16082 errstr => $_ eq 'iso' ? 'unknown osi proto \'tcp\'' :
16083 $_ eq 'link' ? 'unknown ether proto \'tcp\'' :
16084 'unknown protocol: tcp',
16085 };
16086 }
16087
16088 foreach (pquals_without 'proto') {
16089 # pnum -> gen_ncode() -> case Q_PROTO -> gen_proto() -> default
16090 push @reject_tests, {
16091 name => "${_}_proto_17",
16092 DLT => 'EN10MB',
16093 expr => "${_} proto 17",
16094 errstr => $_ eq 'decnet' ?
16095 'invalid DECnet address \'17\'' :
16096 "'${_}' is not a valid qualifier for 'proto'",
16097 };
16098 # ID -> gen_scode() -> case Q_PROTO -> lookup_proto()
16099 push @reject_tests, {
16100 name => "${_}_proto_tcp",
16101 DLT => 'EN10MB',
16102 expr => "${_} proto \\tcp",
16103 errstr => 'unknown protocol: tcp',
16104 };
16105 last if $only_short;
16106 }
16107
16108 # Use a separate foreach loop for each feature because different loops skip
16109 # different DLTs and can terminate early.
16110
16111 # gen_linktype() -> default
16112 foreach (DLTs_without 'link_proto') {
16113 push @reject_tests, {
16114 name => "link_proto_1_${_}",
16115 DLT => $_,
16116 expr => 'link proto 1',
16117 errstr => 'link-layer type filtering not implemented for',
16118 };
16119 }
16120
16121 # gen_broadcast() -> case Q_LINK -> default
16122 foreach (DLTs_without 'link_broadcast') {
16123 push @reject_tests, {
16124 name => "link_broadcast_${_}",
16125 DLT => $_,
16126 expr => 'link broadcast',
16127 errstr => '\'broadcast\' not supported on',
16128 };
16129 }
16130
16131 # gen_multicast() -> case Q_LINK -> default
16132 foreach (DLTs_without 'link_multicast') {
16133 push @reject_tests, {
16134 name => "link_multicast_${_}",
16135 DLT => $_,
16136 expr => 'link multicast',
16137 errstr => '\'multicast\' not supported on',
16138 };
16139 }
16140
16141 # gen_vlan() -> default
16142 foreach (DLTs_without 'vlan') {
16143 push @reject_tests, {
16144 name => "vlan_${_}",
16145 DLT => $_,
16146 expr => 'vlan',
16147 errstr => 'no VLAN support for',
16148 };
16149 }
16150
16151 # gen_mpls_internal() -> default
16152 foreach (DLTs_without 'mpls') {
16153 push @reject_tests, {
16154 name => "mpls_${_}",
16155 DLT => $_,
16156 expr => 'mpls',
16157 errstr => 'no MPLS support for',
16158 };
16159 }
16160
16161 # gen_llc_internal() -> default
16162 foreach (DLTs_without 'llc') {
16163 push @reject_tests, {
16164 name => "llc_${_}",
16165 DLT => $_,
16166 expr => 'llc',
16167 errstr => '\'llc\' not supported on',
16168 };
16169 }
16170
16171 foreach (DLTs_without 'wlan') {
16172 # gen_p80211_type() -> default
16173 push @reject_tests, {
16174 name => "type_data_${_}",
16175 DLT => $_,
16176 expr => 'type data',
16177 errstr => '\'type/subtype\' not supported on',
16178 };
16179 # gen_p80211_fcdir() -> default
16180 push @reject_tests, {
16181 name => "dir_fromds_${_}",
16182 DLT => $_,
16183 expr => 'dir fromds',
16184 errstr => '\'dir\' not supported on',
16185 };
16186 }
16187
16188 # gen_scode() -> case Q_HOST -> proto == Q_LINK -> non-WLAN case -> gen_mac48hostop() -> default case
16189 # Invokes bpf_error() after pcap_ether_hostton().
16190 foreach my $DLT (DLTs_without '') {
16191 next if ! DLT_feature ($DLT, 'link_host_mac48') || DLT_feature ($DLT, 'wlan');
16192 push @reject_tests, {
16193 name => "link_${_}_name_${DLT}",
16194 skip => skip_no_ethers(),
16195 DLT => $DLT,
16196 expr => "link $_ eth-noipv4-noipv6.host123.libpcap.test",
16197 errstr => "'$_' is valid for 802.11 syntax only",
16198 } foreach dquals_with 'wlan';
16199 last if $only_short;
16200 }
16201
16202 # gen_acode() -> default
16203 foreach (DLTs_without 'link_host_mac8') {
16204 push @reject_tests, {
16205 name => "link_host_21_${_}",
16206 DLT => $_,
16207 expr => 'link host $21',
16208 errstr => 'aid supported only on ARCnet',
16209 };
16210 }
16211
16212 # assert_ss7() -> default
16213 foreach (DLTs_without 'ss7') {
16214 push @reject_tests, {
16215 name => "fisu_${_}",
16216 DLT => $_,
16217 expr => 'fisu',
16218 errstr => '\'fisu\' supported only on SS7',
16219 };
16220 }
16221
16222 foreach (DLTs_without 'link_host_mac48') {
16223 # gen_gateway() -> case Q_DEFAULT -> default
16224 push @reject_tests, {
16225 name => "gateway_name_${_}",
16226 skip => skip_config_def1 ('INET6') ||
16227 skip_no_ethers() ||
16228 skip_no_hosts(),
16229 DLT => $_,
16230 expr => 'gateway eth-ipv4-noipv6.host123.libpcap.test',
16231 errstr => '\'gateway\' supported only on ethernet/FDDI/token ring/802.11/ATM LANE/Fibre Channel',
16232 };
16233 # gen_scode() -> case Q_DEFAULT -> Q_LINK
16234 push @reject_tests, {
16235 name => "link_host_name_${_}",
16236 skip => skip_no_ethers(),
16237 DLT => $_,
16238 expr => 'link host eth-noipv4-noipv6.host123.libpcap.test',
16239 errstr => 'only ethernet/FDDI/token ring/802.11/ATM LANE/Fibre Channel supports link-level host name',
16240 };
16241 }
16242
16243 # gen_inbound_outbound() -> default
16244 foreach (DLTs_without 'inout') {
16245 push @reject_tests, {
16246 name => "inbound_linux_${_}",
16247 skip => skip_os_not ('linux'),
16248 DLT => $_,
16249 expr => 'inbound',
16250 errstr => 'not a live capture',
16251 };
16252 push @reject_tests, {
16253 name => "outbound_linux_${_}",
16254 skip => skip_os_not ('linux'),
16255 DLT => $_,
16256 expr => 'outbound',
16257 errstr => 'not a live capture',
16258 };
16259 push @reject_tests, {
16260 name => "inbound_other_${_}",
16261 skip => skip_os ('linux'),
16262 DLT => $_,
16263 expr => 'inbound',
16264 errstr => 'not supported on',
16265 };
16266 push @reject_tests, {
16267 name => "outbound_other_${_}",
16268 skip => skip_os ('linux'),
16269 DLT => $_,
16270 expr => 'outbound',
16271 errstr => 'not supported on',
16272 };
16273 }
16274
16275 # assert_pflog() -> default
16276 foreach (DLTs_without 'pflog') {
16277 push @reject_tests, {
16278 name => "reason_congestion_${_}",
16279 DLT => $_,
16280 expr => 'reason congestion',
16281 errstr => '\'reason\' supported only on PFLOG linktype',
16282 };
16283 }
16284
16285 # assert_atm() -> default
16286 foreach (DLTs_without 'atm') {
16287 push @reject_tests, {
16288 name => "vpi_1_${_}",
16289 DLT => $_,
16290 expr => 'vpi 1',
16291 errstr => '\'vpi\' supported only on SUNATM',
16292 };
16293 }
16294
16295 # gen_ifindex -> default
16296 foreach (DLTs_without 'ifindex') {
16297 push @reject_tests, {
16298 name => "ifindex_1_${_}",
16299 skip => skip_os ('linux'),
16300 DLT => $_,
16301 expr => 'ifindex 1',
16302 errstr => '\'ifindex\' not supported on',
16303 };
16304 push @reject_tests, {
16305 name => "ifindex_2_${_}",
16306 skip => skip_os_not ('linux'),
16307 DLT => $_,
16308 expr => 'ifindex 2',
16309 errstr => 'not a live capture',
16310 };
16311 }
16312
16313 # the prerequisite in gen_protochain()
16314 foreach (DLTs_with 'var_off_linkpl') {
16315 push @reject_tests, {
16316 name => "protochain_4_${_}",
16317 skip => skip_config_def1 ('NO_PROTOCHAIN'),
16318 DLT => $_,
16319 expr => 'protochain 4',
16320 errstr => '\'protochain\' not supported with variable length headers',
16321 };
16322 }
16323
16324 sub accept_test_label {
16325 return join '_', ('accept', @_);
16326 }
16327
16328 sub apply_test_label {
16329 return join '_', ('apply', @_);
16330 }
16331
16332 sub reject_test_label {
16333 return join '_', ('reject', @_);
16334 }
16335
16336 sub time_test_command {
16337 my $cmdline = join ' ', @_;
16338 my $r;
16339 my $T;
16340 if (! $print_passed) {
16341 $r = system $cmdline;
16342 } else {
16343 my $t0 = Time::HiRes::time;
16344 $r = system $cmdline;
16345 $T = Time::HiRes::time - $t0;
16346 }
16347 return ($r >>= 8, $T);
16348 }
16349
16350 sub validate_stdout_test {
16351 my ($r, $T) = time_test_command @_;
16352
16353 return result_timed_out 'filtertest timeout' if $r == TIMED_OUT;
16354
16355 return result_failed (
16356 'filtertest error',
16357 file_get_contents mytmpfile $filename_stdout
16358 ) if $r;
16359
16360 return result_failed (
16361 'diff error',
16362 file_get_contents mytmpfile $filename_diags
16363 ) if system sprintf "diff $diff_flags %s %s >%s 2>&1",
16364 mytmpfile ($filename_expected),
16365 mytmpfile ($filename_stdout),
16366 mytmpfile ($filename_diags);
16367
16368 return result_passed $T;
16369 }
16370
16371 sub common_filtertest_args {
16372 my $test = shift;
16373 # BSD timeout(1) does not implement --verbose.
16374 my @args = defined $timeout_bin ? ($timeout_bin, $test_timeout) : ();
16375 push @args, $filtertest;
16376 push @args, ('-s', $test->{snaplen}) if defined $test->{snaplen};
16377 push @args, ('-m', $test->{netmask}) if defined $test->{netmask};
16378 push @args, '-O' unless $test->{optimize};
16379 push @args, '-l' if $test->{linuxext};
16380 return @args;
16381 }
16382
16383 sub run_accept_test {
16384 my $test = shift;
16385 my @args = common_filtertest_args $test;
16386 # Write the filter expression to a file because the version of
16387 # system() that takes a list does not support redirecting stdout,
16388 # and the version of system() that takes a string does not escape
16389 # special characters in the filter expression, which becomes
16390 # invalid shell syntax.
16391 file_put_contents mytmpfile ($filename_filter), $test->{expr};
16392 file_put_contents mytmpfile ($filename_expected), $test->{expected};
16393 push @args, (
16394 '-F',
16395 mytmpfile ($filename_filter),
16396 $test->{DLT},
16397 '>' . mytmpfile ($filename_stdout),
16398 "2>&1"
16399 );
16400 return validate_stdout_test @args;
16401 }
16402
16403 sub run_apply_test {
16404 my $test = shift;
16405 my @args = common_filtertest_args $test;
16406 file_put_contents mytmpfile ($filename_filter), $test->{expr};
16407 file_put_contents mytmpfile ($filename_expected), $test->{expected};
16408 push @args, (
16409 '-F',
16410 mytmpfile ($filename_filter),
16411 '-r',
16412 SAVEFILE_DIR . $test->{savefile},
16413 '>' . mytmpfile ($filename_stdout),
16414 "2>&1"
16415 );
16416 return validate_stdout_test @args;
16417 }
16418
16419 sub run_reject_test {
16420 my $test = shift;
16421 my @args = common_filtertest_args $test;
16422 file_put_contents mytmpfile ($filename_filter), $test->{expr};
16423 push @args, (
16424 '-F',
16425 mytmpfile ($filename_filter),
16426 $test->{DLT},
16427 '>' . mytmpfile ($filename_stdout),
16428 "2>&1",
16429 );
16430 my ($r, $T) = time_test_command @args;
16431
16432 return result_failed (
16433 'no filtertest error',
16434 file_get_contents mytmpfile $filename_stdout
16435 ) if $r == 0;
16436
16437 return result_timed_out 'filtertest timeout' if $r == TIMED_OUT;
16438
16439 return result_failed (
16440 "filtertest status $r",
16441 file_get_contents mytmpfile $filename_stdout
16442 ) if $r != EX_DATAERR;
16443
16444 return result_failed (
16445 'error string mismatch',
16446 file_get_contents mytmpfile $filename_stdout
16447 ) if ! string_in_file ($test->{expected}, mytmpfile $filename_stdout);
16448
16449 return result_passed $T;
16450 }
16451
16452 # Sort all hash elements by key, otherwise the pseudo-random ordering in Perl
16453 # hashes will make it difficult to compare outputs of two invocations.
16454 # Validate all accept test blocks and all reject tests, decide if this is a
16455 # "run all tests" or a "run only this specific test or test block" invocation
16456 # and produce the required test(s) using appropriate permutations of the main
16457 # expression, any aliases and the bytecode version (optimized/unoptimized).
16458 #
16459 # The resulting flat ordered list of tests includes all skipped tests at their
16460 # original positions, this makes it simple to distribute the tests and to
16461 # collect the results preserving the ordering.
16462 my @ready_to_run;
16463 foreach my $test (@accept_blocks) {
16464 if (! defined $test->{name} || $test->{name} eq '') {
16465 die "Internal error: accept test block <UNKNOWN> does not define key 'name'";
16466 }
16467 foreach ('DLT', 'aliases') {
16468 next if defined $test->{$_};
16469 die "Internal error: accept test block '$test->{name}' does not define key '$_'";
16470 }
16471 if ($test->{DLT} eq '') {
16472 die "Internal error: key 'DLT' is an empty string in apply test block '$test->{name}'";
16473 }
16474 if (! scalar @{$test->{aliases}}) {
16475 die "Internal error: accept test block '$test->{name}' defines zero aliases";
16476 } else {
16477 my %unique = map {$_ => 1} @{$test->{aliases}};
16478 if (scalar (keys %unique) != scalar @{$test->{aliases}}) {
16479 die "Internal error: accept test block '$test->{name}' defines duplicate aliases";
16480 }
16481 }
16482 if (! defined $test->{unopt} && ! defined $test->{opt}) {
16483 die "Internal error: accept test block '$test->{name}' defines neither 'unopt' nor 'opt'";
16484 }
16485 # Make the number of skip requests equal to the number of tests, but
16486 # provide the reason for the first skip request only. This avoid wasting
16487 # the vertical scroll space when skipping test blocks with many aliases.
16488 my $skip_reason = (defined $test->{skip} && $test->{skip} ne '') ?
16489 $test->{skip} : undef;
16490 foreach my $optunopt ('unopt', 'opt') {
16491 next unless defined $test->{$optunopt};
16492
16493 if (defined $skip_reason) {
16494 my $i = 0;
16495 foreach (@{$test->{aliases}}) {
16496 my $label = accept_test_label $test->{name}, $optunopt, $i++;
16497 next if defined $only_one && $only_one ne $label;
16498 push @ready_to_run, {
16499 label => $label,
16500 func => \&run_skip_test,
16501 skip => $print_skipped ? $skip_reason : '',
16502 };
16503 $skip_reason = '';
16504 }
16505 } else {
16506 # Dedent and trim to restore the format of bpf_dump().
16507 my $multiline = '';
16508 foreach (split /^/o, $test->{$optunopt}) {
16509 $multiline .= "$1\n" if /^[\t]*(\(.+)$/o;
16510 }
16511 my $i = 0;
16512 foreach (@{$test->{aliases}}) {
16513 my $label = accept_test_label $test->{name}, $optunopt, $i++;
16514 next if defined $only_one && $only_one ne $label;
16515 push @ready_to_run, {
16516 label => $label,
16517 func => \&run_accept_test,
16518 DLT => $test->{DLT},
16519 expr => $_,
16520 snaplen => defined $test->{snaplen} ? $test->{snaplen} : undef,
16521 netmask => defined $test->{netmask} ? $test->{netmask} : undef,
16522 optimize => int ($optunopt eq 'opt'),
16523 linuxext => defined $test->{linuxext} && $test->{linuxext} == 1,
16524 expected => $multiline,
16525 };
16526 }
16527 }
16528 }
16529 }
16530 foreach my $block (@apply_blocks) {
16531 if (! defined $block->{name} || $block->{name} eq '') {
16532 die "Internal error: apply test block <UNKNOWN> does not define key 'name'";
16533 }
16534 foreach ('savefile', 'expr', 'results') {
16535 next if defined $block->{$_};
16536 die "Internal error: apply test block '$block->{name}' does not define key '$_'";
16537 }
16538 foreach ('savefile', 'expr') {
16539 next if $block->{$_} ne '';
16540 die "Internal error: key '$_' is an empty string in apply test block '$block->{name}'";
16541 }
16542 if (! scalar @{$block->{results}}) {
16543 die "Internal error: apply test block '$block->{name}' defines zero results";
16544 }
16545 my $skip_reason = (defined $block->{skip} && $block->{skip} ne '') ?
16546 $block->{skip} : undef;
16547 # Convert the array to filtertest output format.
16548 my $multiline = join ("\n", @{$block->{results}}) . "\n";
16549 foreach my $optunopt ('unopt', 'opt') {
16550 my $label = apply_test_label ($block->{name}, $optunopt);
16551 next if defined $only_one && $only_one ne $label;
16552
16553 if (defined $skip_reason) {
16554 push @ready_to_run, {
16555 label => $label,
16556 func => \&run_skip_test,
16557 skip => $print_skipped ? $skip_reason : '',
16558 };
16559 $skip_reason = '';
16560 next;
16561 }
16562
16563 push @ready_to_run, {
16564 label => $label,
16565 func => \&run_apply_test,
16566 netmask => defined $block->{netmask} ? $block->{netmask} : undef,
16567 optimize => int ($optunopt eq 'opt'),
16568 expr => $block->{expr},
16569 expected => $multiline,
16570 savefile => $block->{savefile},
16571 };
16572 }
16573 }
16574 foreach my $test (@reject_tests) {
16575 if (! defined $test->{name} || $test->{name} eq '') {
16576 die "Internal error: reject test <UNKNOWN> does not define key 'name'";
16577 }
16578 foreach ('DLT', 'expr', 'errstr') {
16579 next if defined $test->{$_} && $test->{$_} ne '';
16580 die "Internal error: reject test '$test->{name}' does not define key '$_'";
16581 }
16582 my $label = reject_test_label $test->{name};
16583 next if defined $only_one && $only_one ne $label;
16584
16585 if (defined $test->{skip} && $test->{skip} ne '') {
16586 push @ready_to_run, {
16587 label => $label,
16588 func => \&run_skip_test,
16589 skip => $print_skipped ? $test->{skip} : '',
16590 };
16591 } else {
16592 push @ready_to_run, {
16593 label => $label,
16594 func => \&run_reject_test,
16595 DLT => $test->{DLT},
16596 netmask => defined $test->{netmask} ? $test->{netmask} : undef,
16597 expr => $test->{expr},
16598 expected => $test->{errstr},
16599 };
16600 }
16601 }
16602
16603 if (! scalar @ready_to_run) {
16604 die "ERROR: Unknown test label '${only_one}'" if defined $only_one;
16605 die 'Internal error: no tests defined to run!'
16606 }
16607 if ($only_list) {
16608 print $_->{label} . "\n" foreach @ready_to_run;
16609 exit EX_OK;
16610 }
16611
16612 $diff_flags = get_diff_flags;
16613
16614 $filtertest = defined $ENV{FILTERTEST_BIN} ? $ENV{FILTERTEST_BIN} :
16615 string_in_file ('/* cmakeconfig.h.in */', $config_h) ? './run/filtertest' :
16616 './testprogs/filtertest';
16617
16618 # In this libpcap version "filtertest -h" prints to stdout and exits normally.
16619 if (system ("$filtertest -h >/dev/null 2>&1") >> 8) {
16620 # Make it easier to see what the problem is.
16621 system $filtertest;
16622 print STDERR "ERROR: $filtertest is not usable\n";
16623 exit 2;
16624 }
16625
16626 # Every test in this file uses an expression that under normal conditions takes
16627 # well under one second to process, so if a filtertest invocation is taking
16628 # longer, it is likely a regression. Or an invocation via Valgrind, which
16629 # demands a sensible host-specific override of the timeout value.
16630 $test_timeout = defined $ENV{FILTERTEST_TIMEOUT} ?
16631 $ENV{FILTERTEST_TIMEOUT} : 1;
16632
16633 if ($test_timeout eq '0') {
16634 print "INFO: Not using a test timeout (FILTERTEST_TIMEOUT=0).\n";
16635 } elsif (defined $ENV{TIMEOUT_BIN}) {
16636 $timeout_bin = $ENV{TIMEOUT_BIN};
16637 if (system ($timeout_bin, '0.1', 'sleep', '10') >> 8 != TIMED_OUT) {
16638 print STDERR "ERROR: TIMEOUT_BIN='$timeout_bin' is not usable.\n";
16639 exit 1;
16640 }
16641 print "INFO: Using a test timeout of $test_timeout (TIMEOUT_BIN='$timeout_bin').\n";
16642 } elsif (system ('timeout', '0.1', 'sleep', '10') >> 8 != TIMED_OUT) {
16643 print "WARNING: Not using a test timeout (the default 'timeout' is not usable).\n";
16644 } else {
16645 $timeout_bin = 'timeout';
16646 printf "INFO: Using a test timeout of %s.\n", $test_timeout;
16647 }
16648
16649 init_tmpdir 'libpcap_TESTrun';
16650 exit test_and_report @ready_to_run;