]> The Tcpdump Group git mirrors - libpcap/blob - testprogs/TESTrun
filtertest: Simplify usage().
[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 {
14722 name => 'gateway_noipv4_noipv6',
14723 skip => skip_config_def1 ('INET6') ||
14724 skip_no_ethers() ||
14725 skip_no_hosts(),
14726 DLT => 'EN10MB',
14727 expr => 'gateway eth-noipv4-noipv6.host123.libpcap.test',
14728 errstr => 'unknown host', # no IPv4 address in /etc/hosts
14729 },
14730 {
14731 name => 'gateway_noipv4_ipv6',
14732 skip => skip_config_def1 ('INET6') ||
14733 skip_no_ethers() ||
14734 skip_no_hosts(),
14735 DLT => 'EN10MB',
14736 expr => 'gateway eth-noipv4-ipv6.host123.libpcap.test',
14737 errstr => 'unknown host', # no IPv4 address in /etc/hosts
14738 },
14739 {
14740 name => 'gateway_noeth',
14741 skip => skip_config_def1 ('INET6') ||
14742 skip_no_ethers() ||
14743 skip_no_hosts(),
14744 DLT => 'EN10MB',
14745 expr => 'gateway noeth-ipv4-noipv6.host123.libpcap.test',
14746 errstr => 'unknown ether host', # not in /etc/ethers
14747 },
14748 {
14749 name => 'src_gateway',
14750 skip => skip_config_def1 ('INET6') ||
14751 skip_no_ethers() ||
14752 skip_no_hosts(),
14753 DLT => 'EN10MB',
14754 expr => 'src gateway eth-ipv4-noipv6.host123.libpcap.test',
14755 errstr => 'syntax error',
14756 },
14757 {
14758 name => 'dst_gateway',
14759 skip => skip_config_def1 ('INET6') ||
14760 skip_no_ethers() ||
14761 skip_no_hosts(),
14762 DLT => 'EN10MB',
14763 expr => 'dst gateway eth-ipv4-noipv6.host123.libpcap.test',
14764 errstr => 'syntax error',
14765 },
14766 {
14767 name => 'src_proto_NUM',
14768 DLT => 'EN10MB',
14769 expr => 'src proto 1',
14770 errstr => 'syntax error',
14771 },
14772 {
14773 name => 'dst_proto_NUM',
14774 DLT => 'EN10MB',
14775 expr => 'dst proto 1',
14776 errstr => 'syntax error',
14777 },
14778 {
14779 name => 'src_proto_ID',
14780 DLT => 'EN10MB',
14781 expr => 'src proto \tcp',
14782 errstr => 'syntax error',
14783 },
14784 {
14785 name => 'dst_proto_ID',
14786 DLT => 'EN10MB',
14787 expr => 'dst proto \tcp',
14788 errstr => 'syntax error',
14789 },
14790 {
14791 name => 'src_protochain_NUM',
14792 DLT => 'EN10MB',
14793 expr => 'src protochain 1',
14794 errstr => 'syntax error',
14795 },
14796 {
14797 name => 'dst_protochain_NUM',
14798 DLT => 'EN10MB',
14799 expr => 'dst protochain 1',
14800 errstr => 'syntax error',
14801 },
14802 {
14803 name => 'src_protochain_ID',
14804 DLT => 'EN10MB',
14805 expr => 'src protochain \tcp',
14806 errstr => 'syntax error',
14807 },
14808 {
14809 name => 'dst_protochain_ID',
14810 DLT => 'EN10MB',
14811 expr => 'dst protochain \tcp',
14812 errstr => 'syntax error',
14813 },
14814 # If "gateway" begins to support IPv6 in future, the reject tests below will
14815 # fail and will need to be replaced with accept tests.
14816 {
14817 name => 'gateway_INET6',
14818 skip => skip_config_undef ('INET6'),
14819 DLT => 'EN10MB',
14820 expr => "gateway eth-ipv4-ipv6.host123.libpcap.test",
14821 errstr => 'not supported in this configuration',
14822 },
14823 {
14824 name => 'gateway_1',
14825 skip => skip_config_def1 ('INET6'),
14826 DLT => 'EN10MB',
14827 expr => 'gateway 1',
14828 errstr => '\'gateway\' requires a name',
14829 },
14830 {
14831 name => 'gateway_1_2',
14832 skip => skip_config_def1 ('INET6'),
14833 DLT => 'EN10MB',
14834 expr => 'gateway 1.2',
14835 errstr => '\'gateway\' requires a name',
14836 },
14837 {
14838 name => 'gateway_1_2_3',
14839 skip => skip_config_def1 ('INET6'),
14840 DLT => 'EN10MB',
14841 expr => 'gateway 1.2.3',
14842 errstr => '\'gateway\' requires a name',
14843 },
14844 {
14845 name => 'gateway_1_2_3_4',
14846 skip => skip_config_def1 ('INET6'),
14847 DLT => 'EN10MB',
14848 expr => 'gateway 1.2.3.4',
14849 errstr => '\'gateway\' requires a name',
14850 },
14851 {
14852 name => 'gateway_mac48',
14853 skip => skip_config_def1 ('INET6'),
14854 DLT => 'EN10MB',
14855 expr => 'gateway 11:22:33:44:55:66',
14856 errstr => 'ethernet address used in non-ether expression',
14857 },
14858 {
14859 name => 'gateway_arcnet',
14860 skip => skip_config_def1 ('INET6'),
14861 DLT => 'EN10MB',
14862 expr => 'gateway $af',
14863 errstr => 'aid supported only on ARCnet',
14864 },
14865 {
14866 name => 'index_size_neg',
14867 DLT => 'RAW',
14868 expr => 'link[0:-1] != 0',
14869 errstr => 'syntax error',
14870 },
14871 {
14872 name => 'index_size_0',
14873 DLT => 'RAW',
14874 expr => 'link[0:0] != 0',
14875 errstr => 'data size must be 1, 2, or 4',
14876 },
14877 {
14878 name => 'index_size_3',
14879 DLT => 'RAW',
14880 expr => 'link[0:3] != 0',
14881 errstr => 'data size must be 1, 2, or 4',
14882 },
14883 {
14884 name => 'index_size_5',
14885 DLT => 'RAW',
14886 expr => 'link[0:5] != 0',
14887 errstr => 'data size must be 1, 2, or 4',
14888 },
14889 {
14890 name => 'bare_radio',
14891 DLT => 'IEEE802_11_RADIO',
14892 expr => 'radio',
14893 errstr => '\'radio\' cannot be used as an abbreviation',
14894 },
14895 {
14896 name => 'bare_link',
14897 DLT => 'IEEE802_11_RADIO',
14898 expr => 'link',
14899 errstr => '\'link\' cannot be used as an abbreviation',
14900 },
14901 {
14902 name => 'link_host_ipv4addr',
14903 DLT => 'RAW',
14904 expr => 'link host 1.2.3.4',
14905 errstr => 'illegal link layer address',
14906 },
14907 {
14908 name => 'link_net_ipv4addr',
14909 DLT => 'RAW',
14910 expr => 'link net 1.2.3.4',
14911 errstr => 'illegal link layer address',
14912 },
14913 {
14914 skip => skip_config_undef ('INET6'),
14915 name => 'link_host_ipv6addr',
14916 DLT => 'RAW',
14917 expr => 'link host fe80::',
14918 errstr => '\'link\' is not a valid qualifier for \'ip6 host\'',
14919 },
14920 {
14921 skip => skip_config_undef ('INET6'),
14922 name => 'link_net_ipv6addr',
14923 DLT => 'RAW',
14924 expr => 'link net fe80::',
14925 errstr => '\'link\' is not a valid qualifier for \'ip6 net\'',
14926 },
14927 {
14928 skip => skip_no_networks(),
14929 name => 'link_net_ipv4name',
14930 DLT => 'RAW',
14931 expr => 'link net net-10-20-30-0.libpcap.test',
14932 errstr => '\'link\' is not a valid qualifier for \'ip net\'',
14933 },
14934 {
14935 name => 'reason_invalid_PFLOG',
14936 DLT => 'PFLOG',
14937 expr => 'reason invalid',
14938 errstr => 'unknown PF reason "invalid"',
14939 },
14940 {
14941 name => 'action_invalid_PFLOG',
14942 DLT => 'PFLOG',
14943 expr => 'action invalid',
14944 errstr => 'unknown PF action "invalid"',
14945 },
14946 {
14947 name => 'iso_proto_256',
14948 DLT => 'EN10MB',
14949 expr => 'iso proto 256',
14950 errstr => 'ISO protocol 256 greater than maximum 255',
14951 },
14952 {
14953 name => 'isis_proto_32',
14954 DLT => 'EN10MB',
14955 expr => 'isis proto 32',
14956 errstr => 'IS-IS PDU type 32 greater than maximum 31',
14957 },
14958 {
14959 name => 'byte_ne',
14960 DLT => 'IPV4',
14961 expr => 'byte 1 != 2',
14962 errstr => 'syntax error',
14963 },
14964 {
14965 name => 'byte_le',
14966 DLT => 'IPV4',
14967 expr => 'byte 1 <= 2',
14968 errstr => 'syntax error',
14969 },
14970 {
14971 name => 'byte_ge',
14972 DLT => 'IPV4',
14973 expr => 'byte 1 >= 2',
14974 errstr => 'syntax error',
14975 },
14976 {
14977 name => 'byte_xor',
14978 DLT => 'IPV4',
14979 expr => 'byte 1 ^ 2',
14980 errstr => 'syntax error',
14981 },
14982 {
14983 name => 'byte_lsh',
14984 DLT => 'IPV4',
14985 expr => 'byte 1 << 2',
14986 errstr => 'syntax error',
14987 },
14988 {
14989 name => 'byte_rsh',
14990 DLT => 'IPV4',
14991 expr => 'byte 1 >> 2',
14992 errstr => 'syntax error',
14993 },
14994 {
14995 name => 'byte_eq_256',
14996 DLT => 'IPV4',
14997 expr => 'byte 1 = 256',
14998 errstr => 'byte argument 256 greater than maximum 255',
14999 },
15000 {
15001 name => 'byte_lt_256',
15002 DLT => 'IPV4',
15003 expr => 'byte 1 < 256',
15004 errstr => 'byte argument 256 greater than maximum 255',
15005 },
15006 {
15007 name => 'byte_gt_256',
15008 DLT => 'IPV4',
15009 expr => 'byte 1 > 256',
15010 errstr => 'byte argument 256 greater than maximum 255',
15011 },
15012 {
15013 name => 'byte_and_256',
15014 DLT => 'IPV4',
15015 expr => 'byte 1 & 256',
15016 errstr => 'byte argument 256 greater than maximum 255',
15017 },
15018 {
15019 name => 'byte_or_256',
15020 DLT => 'IPV4',
15021 expr => 'byte 1 | 256',
15022 errstr => 'byte argument 256 greater than maximum 255',
15023 },
15024 {
15025 name => 'vxlan_invalid',
15026 DLT => 'EN10MB',
15027 expr => 'vxlan invalid',
15028 errstr => 'syntax error',
15029 },
15030 {
15031 name => 'vxlan_123456789',
15032 DLT => 'EN10MB',
15033 expr => 'vxlan 123456789',
15034 errstr => 'VXLAN VNI 123456789 greater than maximum 16777215',
15035 },
15036 {
15037 name => 'geneve_invalid',
15038 DLT => 'EN10MB',
15039 expr => 'geneve invalid',
15040 errstr => 'syntax error',
15041 },
15042 {
15043 name => 'geneve_123456789',
15044 DLT => 'EN10MB',
15045 expr => 'geneve 123456789',
15046 errstr => 'Geneve VNI 123456789 greater than maximum 16777215',
15047 },
15048 # gen_linktype()
15049 {
15050 name => 'link_proto_65536_C_HDLC',
15051 DLT => 'C_HDLC',
15052 expr => 'link proto 65536',
15053 errstr => 'HDLC protocol 65536 greater than maximum 65535',
15054 },
15055 {
15056 name => 'link_proto_65536_PPP',
15057 DLT => 'PPP',
15058 expr => 'link proto 65536',
15059 errstr => 'PPP protocol 65536 greater than maximum 65535',
15060 },
15061 {
15062 name => 'link_proto_65536_PPP_BSDOS',
15063 DLT => 'PPP_BSDOS',
15064 expr => 'link proto 65536',
15065 errstr => 'PPP protocol 65536 greater than maximum 65535',
15066 },
15067 {
15068 name => 'link_proto_65536_APPLE_IP_OVER_IEEE1394',
15069 DLT => 'APPLE_IP_OVER_IEEE1394', # the default case
15070 expr => 'link proto 65536',
15071 errstr => 'EtherType 65536 greater than maximum 65535',
15072 },
15073 # gen_ether_linktype()
15074 {
15075 name => 'link_proto_65536_EN10MB',
15076 DLT => 'EN10MB',
15077 expr => 'link proto 65536',
15078 errstr => 'EtherType 65536 greater than maximum 65535',
15079 },
15080 {
15081 name => 'link_proto_1500_EN10MB',
15082 DLT => 'EN10MB',
15083 expr => 'link proto 1500',
15084 errstr => 'LLC DSAP 1500 greater than maximum 255',
15085 },
15086 # gen_llc_linktype
15087 {
15088 name => 'link_proto_65536_IP_OVER_FC',
15089 DLT => 'IP_OVER_FC',
15090 expr => 'link proto 65536',
15091 errstr => 'EtherType 65536 greater than maximum 65535',
15092 },
15093 {
15094 name => 'link_proto_1500_IP_OVER_FC',
15095 DLT => 'IP_OVER_FC',
15096 expr => 'link proto 1500',
15097 errstr => 'LLC DSAP 1500 greater than maximum 255',
15098 },
15099 # gen_linux_sll_linktype
15100 {
15101 name => 'link_proto_65536_LINUX_SLL',
15102 DLT => 'LINUX_SLL',
15103 expr => 'link proto 65536',
15104 errstr => 'EtherType 65536 greater than maximum 65535',
15105 },
15106 {
15107 name => 'link_proto_1500_LINUX_SLL',
15108 DLT => 'LINUX_SLL',
15109 expr => 'link proto 1500',
15110 errstr => 'LLC DSAP 1500 greater than maximum 255',
15111 },
15112 );
15113
15114 # "proto" qualifiers without any lexer-level aliases (the entries correspond
15115 # to Q_LINK~Q_CARP from gencode.h and are ordered by name).
15116 my %pqual_features = (
15117 aarp => {
15118 },
15119 ah => {
15120 },
15121 arp => {
15122 index => 1,
15123 host => 1,
15124 gateway => 1,
15125 },
15126 atalk => {
15127 index => 1,
15128 },
15129 carp => {
15130 index => 1,
15131 },
15132 clnp => {
15133 },
15134 csnp => {
15135 },
15136 decnet => {
15137 index => 1,
15138 host => 1,
15139 },
15140 esis => {
15141 },
15142 esp => {
15143 },
15144 icmp => {
15145 index => 1,
15146 },
15147 icmp6 => {
15148 index => 1,
15149 },
15150 igmp => {
15151 index => 1,
15152 },
15153 igrp => {
15154 index => 1,
15155 },
15156 iih => {
15157 },
15158 ip => {
15159 index => 1,
15160 host => 1,
15161 gateway => 1,
15162 protochain => 1,
15163 proto => 1,
15164 },
15165 ip6 => {
15166 index => 1,
15167 host => 1,
15168 protochain => 1,
15169 proto => 1,
15170 },
15171 ipx => {
15172 },
15173 isis => {
15174 proto => 1,
15175 },
15176 iso => {
15177 proto => 1,
15178 },
15179 l1 => {
15180 },
15181 l2 => {
15182 },
15183 lat => {
15184 index => 1,
15185 },
15186 link => {
15187 index => 1,
15188 host => 1,
15189 proto => 1,
15190 },
15191 lsp => {
15192 },
15193 mopdl => {
15194 index => 1,
15195 },
15196 moprc => {
15197 index => 1,
15198 },
15199 netbeui => {
15200 },
15201 pim => {
15202 index => 1,
15203 },
15204 psnp => {
15205 },
15206 radio => {
15207 index => 1,
15208 },
15209 rarp => {
15210 index => 1,
15211 host => 1,
15212 gateway => 1,
15213 },
15214 sca => {
15215 index => 1,
15216 },
15217 sctp => {
15218 index => 1,
15219 },
15220 snp => {
15221 },
15222 stp => {
15223 },
15224 tcp => {
15225 index => 1,
15226 },
15227 udp => {
15228 index => 1,
15229 },
15230 vrrp => {
15231 index => 1,
15232 },
15233 );
15234
15235 sub pqual_feature {
15236 my $name = shift;
15237 my $feature = shift;
15238 die if not exists $pqual_features{$name};
15239 return exists $pqual_features{$name}{$feature} && $pqual_features{$name}{$feature} == 1;
15240 }
15241
15242 sub pqual_names {
15243 return keys %pqual_features;
15244 }
15245
15246 sub pquals_with {
15247 my $feature = shift;
15248 my @ret;
15249 foreach (pqual_names) {
15250 next unless pqual_feature $_, $feature;
15251 push @ret, $_;
15252 last if $only_short;
15253 }
15254 return @ret;
15255 }
15256
15257 sub pquals_without {
15258 my $feature = shift;
15259 my @ret;
15260 foreach (pqual_names) {
15261 next if pqual_feature $_, $feature;
15262 push @ret, $_;
15263 last if $only_short;
15264 }
15265 return @ret;
15266 }
15267
15268 # All DLTs pcap_datalink_name_to_val() recognizes, ordered by name.
15269 my %DLTfeatures = (
15270 A429 => {
15271 },
15272 A653_ICM => {
15273 },
15274 AOS => {
15275 },
15276 APPLE_IP_OVER_IEEE1394 => {
15277 link_proto => 1, # gen_linktype() default case
15278 },
15279 ARCNET => {
15280 link_proto => 1,
15281 link_broadcast => 1,
15282 link_multicast => 1,
15283 link_host_mac8 => 1,
15284 },
15285 ARCNET_LINUX => {
15286 link_proto => 1,
15287 link_broadcast => 1,
15288 link_multicast => 1,
15289 link_host_mac8 => 1,
15290 },
15291 ATM_CLIP => {
15292 link_proto => 1,
15293 },
15294 ATM_RFC1483 => {
15295 link_proto => 1,
15296 llc => 1,
15297 },
15298 ATSC_ALP => {
15299 },
15300 AUERSWALD_LOG => {
15301 },
15302 AX25_KISS => {
15303 },
15304 BACNET_MS_TP => {
15305 link_proto => 1,
15306 },
15307 BLUETOOTH_BREDR_BB => {
15308 },
15309 BLUETOOTH_HCI_H4 => {
15310 },
15311 BLUETOOTH_HCI_H4_WITH_PHDR => {
15312 },
15313 BLUETOOTH_LE_LL => {
15314 },
15315 BLUETOOTH_LE_LL_WITH_PHDR => {
15316 },
15317 BLUETOOTH_LINUX_MONITOR => {
15318 },
15319 CAN20B => {
15320 },
15321 CAN_SOCKETCAN => {
15322 },
15323 C_HDLC => {
15324 link_proto => 1,
15325 mpls => 1,
15326 },
15327 DBUS => {
15328 },
15329 DECT => {
15330 },
15331 DECT_NR => {
15332 },
15333 DISPLAYPORT_AUX => {
15334 },
15335 DOCSIS => {
15336 },
15337 DOCSIS31_XRA31 => {
15338 },
15339 DSA_TAG_BRCM => {
15340 },
15341 DSA_TAG_BRCM_PREPEND => {
15342 },
15343 DSA_TAG_DSA => {
15344 },
15345 DSA_TAG_EDSA => {
15346 },
15347 DVB_CI => {
15348 },
15349 EBHSCR => {
15350 },
15351 ELEE => {
15352 },
15353 EN10MB => {
15354 link_proto => 1,
15355 link_broadcast => 1,
15356 link_multicast => 1,
15357 link_host_mac48 => 1,
15358 vlan => 1,
15359 mpls => 1,
15360 llc => 1,
15361 },
15362 ENC => {
15363 link_proto => 1,
15364 },
15365 EPON => {
15366 },
15367 ERF => {
15368 ss7 => 1,
15369 },
15370 ERF_ETH => {
15371 },
15372 ERF_POS => {
15373 },
15374 ETHERNET_MPACKET => {
15375 },
15376 ETW => {
15377 },
15378 FC_2 => {
15379 },
15380 FC_2_WITH_FRAME_DELIMS => {
15381 },
15382 FDDI => {
15383 link_proto => 1,
15384 link_broadcast => 1,
15385 link_multicast => 1,
15386 link_host_mac48 => 1,
15387 llc => 1,
15388 },
15389 FIRA_UCI => {
15390 },
15391 FRELAY => {
15392 link_proto => 1,
15393 },
15394 GPF_F => {
15395 },
15396 GPF_T => {
15397 },
15398 GPRS_LLC => {
15399 },
15400 I2C_LINUX => {
15401 },
15402 IEEE802 => {
15403 link_proto => 1,
15404 link_broadcast => 1,
15405 link_multicast => 1,
15406 link_host_mac48 => 1,
15407 llc => 1,
15408 },
15409 IEEE802_11 => {
15410 link_proto => 1,
15411 link_broadcast => 1,
15412 link_multicast => 1,
15413 link_host_mac48 => 1,
15414 vlan => 1,
15415 llc => 1,
15416 wlan => 1,
15417 var_off_linkpl => 1,
15418 },
15419 IEEE802_11_RADIO => {
15420 link_proto => 1,
15421 link_broadcast => 1,
15422 link_multicast => 1,
15423 link_host_mac48 => 1,
15424 vlan => 1,
15425 llc => 1,
15426 wlan => 1,
15427 var_off_linkpl => 1,
15428 },
15429 IEEE802_11_RADIO_AVS => {
15430 link_proto => 1,
15431 link_broadcast => 1,
15432 link_multicast => 1,
15433 link_host_mac48 => 1,
15434 vlan => 1,
15435 llc => 1,
15436 wlan => 1,
15437 var_off_linkpl => 1,
15438 },
15439 IEEE802_15_4 => {
15440 },
15441 IEEE802_15_4_LINUX => {
15442 },
15443 IEEE802_15_4_NOFCS => {
15444 },
15445 IEEE802_15_4_NONASK_PHY => {
15446 },
15447 IEEE802_15_4_TAP => {
15448 },
15449 IEEE802_16_MAC_CPS => {
15450 },
15451 IEEE802_16_MAC_CPS_RADIO => {
15452 },
15453 INFINIBAND => {
15454 },
15455 IPMB_KONTRON => {
15456 },
15457 IPMI_HPM_2 => {
15458 },
15459 IPNET => {
15460 link_proto => 1,
15461 inout => 1,
15462 },
15463 IPOIB => {
15464 },
15465 IP_OVER_FC => {
15466 link_proto => 1,
15467 link_broadcast => 1,
15468 link_multicast => 1,
15469 link_host_mac48 => 1,
15470 },
15471 IPV4 => {
15472 link_proto => 1,
15473 },
15474 IPV6 => {
15475 link_proto => 1,
15476 },
15477 ISO_14443 => {
15478 },
15479 JUNIPER_ATM1 => {
15480 link_proto => 1,
15481 inout => 1,
15482 },
15483 JUNIPER_ATM2 => {
15484 link_proto => 1,
15485 inout => 1,
15486 },
15487 JUNIPER_ATM_CEMIC => {
15488 link_proto => 1,
15489 inout => 1,
15490 },
15491 JUNIPER_CHDLC => {
15492 link_proto => 1,
15493 inout => 1,
15494 },
15495 JUNIPER_ES => {
15496 link_proto => 1,
15497 inout => 1,
15498 },
15499 JUNIPER_ETHER => {
15500 link_proto => 1,
15501 inout => 1,
15502 },
15503 JUNIPER_FIBRECHANNEL => {
15504 link_proto => 1,
15505 inout => 1,
15506 },
15507 JUNIPER_FRELAY => {
15508 link_proto => 1,
15509 inout => 1,
15510 },
15511 JUNIPER_GGSN => {
15512 link_proto => 1,
15513 inout => 1,
15514 },
15515 JUNIPER_ISM => {
15516 link_proto => 1,
15517 inout => 1,
15518 },
15519 JUNIPER_MFR => {
15520 link_proto => 1,
15521 inout => 1,
15522 },
15523 JUNIPER_MLFR => {
15524 link_proto => 1,
15525 inout => 1,
15526 },
15527 JUNIPER_MLPPP => {
15528 link_proto => 1,
15529 inout => 1,
15530 },
15531 JUNIPER_MONITOR => {
15532 link_proto => 1,
15533 inout => 1,
15534 },
15535 JUNIPER_PIC_PEER => {
15536 },
15537 JUNIPER_PPP => {
15538 link_proto => 1,
15539 inout => 1,
15540 },
15541 JUNIPER_PPPOE => {
15542 link_proto => 1,
15543 inout => 1,
15544 },
15545 JUNIPER_PPPOE_ATM => {
15546 link_proto => 1,
15547 inout => 1,
15548 },
15549 JUNIPER_SERVICES => {
15550 link_proto => 1,
15551 inout => 1,
15552 },
15553 JUNIPER_SRX_E2E => {
15554 link_proto => 1,
15555 inout => 1,
15556 },
15557 JUNIPER_ST => {
15558 link_proto => 1,
15559 inout => 1,
15560 },
15561 JUNIPER_VP => {
15562 link_proto => 1,
15563 inout => 1,
15564 },
15565 JUNIPER_VS => {
15566 link_proto => 1,
15567 inout => 1,
15568 },
15569 LINUX_EVDEV => {
15570 },
15571 LINUX_IRDA => {
15572 },
15573 LINUX_LAPD => {
15574 },
15575 LINUX_SLL => {
15576 link_proto => 1,
15577 inout => 1,
15578 },
15579 LINUX_SLL2 => {
15580 link_proto => 1, # gen_linktype() default case
15581 inout => 1,
15582 ifindex => 1,
15583 },
15584 LOOP => {
15585 link_proto => 1,
15586 },
15587 LTALK => {
15588 link_proto => 1,
15589 },
15590 MDB => {
15591 },
15592 MFR => {
15593 },
15594 MPEG_2_TS => {
15595 },
15596 MPLS => {
15597 },
15598 MTP2 => {
15599 ss7 => 1,
15600 },
15601 MTP2_WITH_PHDR => {
15602 ss7 => 1,
15603 },
15604 MTP3 => {
15605 },
15606 MUX27010 => {
15607 },
15608 NETANALYZER => {
15609 link_proto => 1,
15610 link_broadcast => 1,
15611 link_multicast => 1,
15612 link_host_mac48 => 1,
15613 vlan => 1,
15614 mpls => 1,
15615 },
15616 NETANALYZER_NG => {
15617 },
15618 NETANALYZER_TRANSPARENT => {
15619 link_proto => 1,
15620 link_broadcast => 1,
15621 link_multicast => 1,
15622 link_host_mac48 => 1,
15623 vlan => 1,
15624 mpls => 1,
15625 },
15626 NETLINK => {
15627 },
15628 NFC_LLCP => {
15629 },
15630 NFLOG => {
15631 },
15632 NG40 => {
15633 },
15634 NORDIC_BLE => {
15635 },
15636 NULL => {
15637 link_proto => 1,
15638 },
15639 OPENFLOW => {
15640 },
15641 OPENVIZSLA => {
15642 },
15643 PFLOG => {
15644 link_proto => 1,
15645 inout => 1,
15646 pflog => 1,
15647 },
15648 PFSYNC => {
15649 },
15650 PKTAP => {
15651 },
15652 PPI => {
15653 link_proto => 1,
15654 link_broadcast => 1,
15655 link_multicast => 1,
15656 link_host_mac48 => 1,
15657 llc => 1,
15658 wlan => 1,
15659 var_off_linkpl => 1,
15660 },
15661 PPP => {
15662 link_proto => 1,
15663 mpls => 1,
15664 },
15665 PPP_BSDOS => {
15666 link_proto => 1,
15667 },
15668 PPP_ETHER => {
15669 link_proto => 1,
15670 },
15671 PPP_PPPD => {
15672 link_proto => 1,
15673 inout => 1,
15674 },
15675 PPP_SERIAL => {
15676 link_proto => 1,
15677 },
15678 PRISM_HEADER => {
15679 link_proto => 1,
15680 link_broadcast => 1,
15681 link_multicast => 1,
15682 link_host_mac48 => 1,
15683 vlan => 1,
15684 llc => 1,
15685 wlan => 1,
15686 var_off_linkpl => 1,
15687 },
15688 PROFIBUS_DL => {
15689 },
15690 RAIF1 => {
15691 },
15692 RAW => {
15693 link_proto => 1,
15694 },
15695 RDS => {
15696 },
15697 RTAC_SERIAL => {
15698 },
15699 SCCP => {
15700 },
15701 SCTP => {
15702 },
15703 SDLC => {
15704 },
15705 SILABS_DEBUG_CHANNEL => {
15706 },
15707 SITA => {
15708 },
15709 SLIP => {
15710 link_proto => 1,
15711 inout => 1,
15712 },
15713 SLIP_BSDOS => {
15714 link_proto => 1,
15715 },
15716 STANAG_5066_D_PDU => {
15717 },
15718 SUNATM => {
15719 link_proto => 1,
15720 llc => 1,
15721 atm => 1,
15722 },
15723 SYMANTEC_FIREWALL => {
15724 link_proto => 1, # gen_linktype() default case
15725 },
15726 TI_LLN_SNIFFER => {
15727 },
15728 USB_2_0 => {
15729 },
15730 USB_2_0_FULL_SPEED => {
15731 },
15732 USB_2_0_HIGH_SPEED => {
15733 },
15734 USB_2_0_LOW_SPEED => {
15735 },
15736 USB_DARWIN => {
15737 },
15738 USB_FREEBSD => {
15739 },
15740 USB_LINUX => {
15741 },
15742 USB_LINUX_MMAPPED => {
15743 },
15744 USBPCAP => {
15745 },
15746 VPP_DISPATCH => {
15747 },
15748 VSOCK => {
15749 },
15750 WATTSTOPPER_DLM => {
15751 },
15752 WIHART => {
15753 },
15754 ZBOSS_NCP => {
15755 },
15756 ZWAVE_R1_R2 => {
15757 },
15758 ZWAVE_R3 => {
15759 },
15760 Z_WAVE_SERIAL => {
15761 },
15762 ZWAVE_TAP => {
15763 },
15764 );
15765
15766 sub DLT_names {
15767 return keys %DLTfeatures;
15768 }
15769
15770 sub DLT_feature {
15771 my $name = shift;
15772 my $feature = shift;
15773 die if not exists $DLTfeatures{$name};
15774 return exists $DLTfeatures{$name}{$feature} && $DLTfeatures{$name}{$feature} == 1;
15775 }
15776
15777 sub DLTs_with {
15778 my $feature = shift;
15779 my @ret;
15780 foreach (DLT_names) {
15781 next unless DLT_feature $_, $feature;
15782 push @ret, $_;
15783 last if $only_short;
15784 }
15785 return @ret;
15786 }
15787
15788 sub DLTs_without {
15789 my $feature = shift;
15790 my @ret;
15791 foreach (DLT_names) {
15792 next if DLT_feature $_, $feature;
15793 push @ret, $_;
15794 last if $only_short;
15795 }
15796 return @ret;
15797 }
15798
15799 # gen_load_internal() -> default
15800 foreach (pquals_without 'index') {
15801 push @reject_tests, {
15802 name => "noindex_${_}",
15803 DLT => 'EN10MB',
15804 expr => "${_}[0] == 0",
15805 errstr => "'${_}' does not support the index operation",
15806 };
15807 }
15808
15809 # "link host IPV4ADDR" and "link net IPV4ADDR" use a different code path with
15810 # a different error message and are tested above. "link net NAME" uses yet
15811 # another different code path with yet another different error message and is
15812 # tested above. "(link|ip|rarp|arp|decnet|ip6) host" can be valid syntax or
15813 # not (depending on the primitive ID), which is tested above.
15814 foreach (pquals_without 'host') {
15815 # HID -> gen_ncode() -> gen_host() -> default
15816 push @reject_tests, {
15817 name => "inv_qual_${_}_host_ipv4addr",
15818 DLT => 'EN10MB',
15819 expr => "${_} host 1.2.3.4",
15820 errstr => "'${_}' is not a valid qualifier for 'ip host'",
15821 };
15822 # HID -> gen_ncode() -> gen_host() -> default
15823 push @reject_tests, {
15824 name => "inv_qual_${_}_net_ipv4addr",
15825 DLT => 'EN10MB',
15826 expr => "${_} net 1.2.3.4",
15827 errstr => "'${_}' is not a valid qualifier for 'ip net'",
15828 };
15829 # HID6 -> gen_mcode6() -> gen_host6() -> default
15830 push @reject_tests, {
15831 skip => skip_config_undef ('INET6'),
15832 name => "inv_qual_${_}_host_ipv6addr",
15833 DLT => 'EN10MB',
15834 expr => "${_} host fe80::",
15835 errstr => "'${_}' is not a valid qualifier for 'ip6 host'",
15836 };
15837 # HID6 -> gen_mcode6() -> gen_host6() -> default
15838 push @reject_tests, {
15839 skip => skip_config_undef ('INET6'),
15840 name => "inv_qual_${_}_net_ipv6addr",
15841 DLT => 'EN10MB',
15842 expr => "${_} net fe80::",
15843 errstr => "'${_}' is not a valid qualifier for 'ip6 net'",
15844 };
15845
15846 # HID NETMASK HID -> gen_mcode() -> default
15847 push @reject_tests, {
15848 name => "inv_qual_${_}_host_ipv4mask",
15849 DLT => 'EN10MB',
15850 expr => "${_} host 1.2.3.0 mask 255.255.255.0",
15851 errstr => 'Mask syntax for networks only',
15852 };
15853 # HID NETMASK HID -> gen_mcode() -> gen_host() -> default
15854 push @reject_tests, {
15855 name => "inv_qual_${_}_net_ipv4mask",
15856 DLT => 'EN10MB',
15857 expr => "${_} net 1.2.3.0 mask 255.255.255.0",
15858 errstr => "'${_}' is not a valid qualifier for 'ip net'",
15859 };
15860 # ("mask" is IPv4-only)
15861
15862 # HID '/' NUM -> gen_mcode() -> default
15863 push @reject_tests, {
15864 name => "inv_qual_${_}_host_ipv4cidr",
15865 DLT => 'EN10MB',
15866 expr => "${_} host 1.2.3.0/24",
15867 errstr => 'Mask syntax for networks only',
15868 };
15869 # HID '/' NUM -> gen_mcode() -> gen_host() -> default
15870 push @reject_tests, {
15871 name => "inv_qual_${_}_net_ipv4cidr",
15872 DLT => 'EN10MB',
15873 expr => "${_} net 1.2.3.0/24",
15874 errstr => "'${_}' is not a valid qualifier for 'ip net'",
15875 };
15876 # HID6 '/' NUM -> gen_mcode6() -> default
15877 push @reject_tests, {
15878 skip => skip_config_undef ('INET6'),
15879 name => "inv_qual_${_}_host_ipv6cidr",
15880 DLT => 'EN10MB',
15881 expr => "${_} host fe80::/16",
15882 errstr => 'Mask syntax for networks only',
15883 };
15884 # HID6 '/' NUM -> gen_mcode6() -> gen_host6() -> default
15885 push @reject_tests, {
15886 skip => skip_config_undef ('INET6'),
15887 name => "inv_qual_${_}_net_ipv6cidr",
15888 DLT => 'EN10MB',
15889 expr => "${_} net fe80::/16",
15890 errstr => "'${_}' is not a valid qualifier for 'ip6 net'",
15891 };
15892
15893 # ID -> gen_scode() -> gen_host() -> default
15894 push @reject_tests, {
15895 skip => skip_no_hosts(),
15896 name => "inv_qual_${_}_host_ipv4name",
15897 DLT => 'EN10MB',
15898 expr => "${_} host noeth-ipv4-noipv6.host123.libpcap.test",
15899 errstr => "'${_}' is not a valid qualifier for 'ip host'",
15900 };
15901 # ID -> gen_scode() -> gen_host() -> default
15902 push @reject_tests, {
15903 skip => skip_no_networks(),
15904 name => "inv_qual_${_}_net_ipv4name",
15905 DLT => 'EN10MB',
15906 expr => "${_} net net-10-20-30-0.libpcap.test",
15907 errstr => "'${_}' is not a valid qualifier for 'ip net'",
15908 };
15909 # ID -> gen_scode() -> gen_host6() -> default
15910 push @reject_tests, {
15911 skip => skip_config_undef ('INET6') || skip_no_hosts(),
15912 name => "inv_qual_${_}_host_ipv6name",
15913 DLT => 'EN10MB',
15914 expr => "${_} host noeth-noipv4-ipv6.host123.libpcap.test",
15915 errstr => "'${_}' is not a valid qualifier for 'ip6 host'",
15916 };
15917 # (IPv6 networks cannot have names)
15918 }
15919
15920 # ID -> gen_scode() -> gen_gateway() -> default
15921 foreach (pquals_without 'gateway') {
15922 push @reject_tests, {
15923 skip => skip_config_def1 ('INET6') ||
15924 skip_no_ethers() ||
15925 skip_no_hosts(),
15926 name => "inv_qual_${_}_gateway_ipv4name",
15927 DLT => 'EN10MB',
15928 expr => "${_} gateway eth-ipv4-noipv6.host123.libpcap.test",
15929 errstr => "'${_}' is not a valid qualifier for 'gateway'",
15930 };
15931 }
15932
15933 foreach my $pq (pqual_names) {
15934 # HID -> gen_ncode() -> case Q_GATEWAY
15935 push @reject_tests, {
15936 name => "${pq}_gateway_HID",
15937 skip => skip_config_def1 ('INET6'),
15938 DLT => 'EN10MB',
15939 expr => "$pq gateway 11.12.13.14",
15940 errstr => $pq eq 'decnet' ?
15941 'invalid DECnet address \'11.12.13.14\'' :
15942 '\'gateway\' requires a name',
15943 };
15944 # HID
15945 push @reject_tests, {
15946 name => "${pq}_${_}_HID",
15947 skip => $_ eq 'protochain' ? skip_config_def1 ('NO_PROTOCHAIN') : '',
15948 DLT => 'EN10MB',
15949 expr => "$pq $_ 11.12.13.14",
15950 errstr => "'$_' qualifier applied to IPv4 address",
15951 } foreach qw(port portrange proto protochain);
15952 # HID '/' NUM -> gen_mcode() -> default
15953 push @reject_tests, {
15954 name => "${pq}_gateway_HID_NUM",
15955 DLT => 'EN10MB',
15956 expr => "$pq gateway 11.12.0.0/16",
15957 errstr => 'Mask syntax for networks only',
15958 };
15959 # HID '/' NUM
15960 push @reject_tests, {
15961 name => "${pq}_${_}_HID_NUM",
15962 skip => $_ eq 'protochain' ? skip_config_def1 ('NO_PROTOCHAIN') : '',
15963 DLT => 'EN10MB',
15964 expr => "$pq $_ 11.12.0.0/16",
15965 errstr => "'$_' qualifier applied to IPv4 address and prefix length",
15966 } foreach qw(port portrange proto protochain);
15967 # HID NETMASK HID -> gen_mcode() -> default
15968 push @reject_tests, {
15969 name => "${pq}_gateway_HID_mask_HID",
15970 DLT => 'EN10MB',
15971 expr => "$pq gateway 11.12.0.0 mask 255.255.0.0",
15972 errstr => 'Mask syntax for networks only',
15973 };
15974 # HID NETMASK HID
15975 push @reject_tests, {
15976 name => "${pq}_${_}_HID_mask_HID",
15977 skip => $_ eq 'protochain' ? skip_config_def1 ('NO_PROTOCHAIN') : '',
15978 DLT => 'EN10MB',
15979 expr => "$pq $_ 11.12.0.0 mask 255.255.0.0",
15980 errstr => "'$_' qualifier applied to IPv4 address and netmask",
15981 } foreach qw(port portrange proto protochain);
15982 # HID6 -> gen_mcode6() -> default
15983 push @reject_tests, {
15984 name => "${pq}_gateway_HID6",
15985 skip => skip_config_undef ('INET6'),
15986 DLT => 'EN10MB',
15987 expr => "$pq gateway fe80::0",
15988 errstr => 'invalid qualifier against IPv6 address',
15989 };
15990 # HID6
15991 push @reject_tests, {
15992 name => "${pq}_${_}_HID6",
15993 skip => $_ eq 'protochain' ?
15994 (skip_config_def1 ('NO_PROTOCHAIN') || skip_config_undef ('INET6')) :
15995 skip_config_undef ('INET6'),
15996 DLT => 'EN10MB',
15997 expr => "$pq $_ fe80::0",
15998 errstr => "'$_' qualifier applied to IPv6 address",
15999 } foreach qw(port portrange proto protochain);
16000 # HID6 '/' NUM -> gen_mcode6() -> default
16001 push @reject_tests, {
16002 name => "${pq}_gateway_HID6_NUM",
16003 skip => skip_config_undef ('INET6'),
16004 DLT => 'EN10MB',
16005 expr => "$pq gateway fe80::0/64",
16006 errstr => 'invalid qualifier against IPv6 address',
16007 };
16008 # HID6 '/' NUM
16009 push @reject_tests, {
16010 name => "${pq}_${_}_HID6_NUM",
16011 skip => $_ eq 'protochain' ?
16012 (skip_config_def1 ('NO_PROTOCHAIN') || skip_config_undef ('INET6')) :
16013 skip_config_undef ('INET6'),
16014 DLT => 'EN10MB',
16015 expr => "$pq $_ fe80::0/64",
16016 errstr => "'$_' qualifier applied to IPv6 address and prefix length",
16017 } foreach qw(port portrange proto protochain);
16018 last if $only_short;
16019 }
16020
16021 foreach (pquals_without 'protochain') {
16022 # pnum -> gen_ncode() -> case Q_PROTOCHAIN -> gen_protochain() -> default
16023 push @reject_tests, {
16024 name => "${_}_protochain_17",
16025 skip => skip_config_def1 ('NO_PROTOCHAIN'),
16026 DLT => 'EN10MB',
16027 expr => "${_} protochain 17",
16028 errstr => $_ eq 'decnet' ?
16029 'invalid DECnet address \'17\'' :
16030 "'${_}' is not a valid qualifier for 'protochain'",
16031 };
16032 # ID -> gen_scode() -> case Q_PROTOCHAIN -> lookup_proto()
16033 push @reject_tests, {
16034 name => "${_}_protochain_tcp",
16035 skip => skip_config_def1 ('NO_PROTOCHAIN'),
16036 DLT => 'EN10MB',
16037 expr => "${_} protochain \\tcp",
16038 errstr => $_ eq 'iso' ? 'unknown osi proto \'tcp\'' :
16039 $_ eq 'link' ? 'unknown ether proto \'tcp\'' :
16040 'unknown protocol: tcp',
16041 };
16042 }
16043
16044 foreach (pquals_without 'proto') {
16045 # pnum -> gen_ncode() -> case Q_PROTO -> gen_proto() -> default
16046 push @reject_tests, {
16047 name => "${_}_proto_17",
16048 DLT => 'EN10MB',
16049 expr => "${_} proto 17",
16050 errstr => $_ eq 'decnet' ?
16051 'invalid DECnet address \'17\'' :
16052 "'${_}' is not a valid qualifier for 'proto'",
16053 };
16054 # ID -> gen_scode() -> case Q_PROTO -> lookup_proto()
16055 push @reject_tests, {
16056 name => "${_}_proto_tcp",
16057 DLT => 'EN10MB',
16058 expr => "${_} proto \\tcp",
16059 errstr => 'unknown protocol: tcp',
16060 };
16061 last if $only_short;
16062 }
16063
16064 # Use a separate foreach loop for each feature because different loops skip
16065 # different DLTs and can terminate early.
16066
16067 # gen_linktype() -> default
16068 foreach (DLTs_without 'link_proto') {
16069 push @reject_tests, {
16070 name => "link_proto_1_${_}",
16071 DLT => $_,
16072 expr => 'link proto 1',
16073 errstr => 'link-layer type filtering not implemented for',
16074 };
16075 }
16076
16077 # gen_broadcast() -> case Q_LINK -> default
16078 foreach (DLTs_without 'link_broadcast') {
16079 push @reject_tests, {
16080 name => "link_broadcast_${_}",
16081 DLT => $_,
16082 expr => 'link broadcast',
16083 errstr => '\'broadcast\' not supported on',
16084 };
16085 }
16086
16087 # gen_multicast() -> case Q_LINK -> default
16088 foreach (DLTs_without 'link_multicast') {
16089 push @reject_tests, {
16090 name => "link_multicast_${_}",
16091 DLT => $_,
16092 expr => 'link multicast',
16093 errstr => '\'multicast\' not supported on',
16094 };
16095 }
16096
16097 # gen_vlan() -> default
16098 foreach (DLTs_without 'vlan') {
16099 push @reject_tests, {
16100 name => "vlan_${_}",
16101 DLT => $_,
16102 expr => 'vlan',
16103 errstr => 'no VLAN support for',
16104 };
16105 }
16106
16107 # gen_mpls_internal() -> default
16108 foreach (DLTs_without 'mpls') {
16109 push @reject_tests, {
16110 name => "mpls_${_}",
16111 DLT => $_,
16112 expr => 'mpls',
16113 errstr => 'no MPLS support for',
16114 };
16115 }
16116
16117 # gen_llc_internal() -> default
16118 foreach (DLTs_without 'llc') {
16119 push @reject_tests, {
16120 name => "llc_${_}",
16121 DLT => $_,
16122 expr => 'llc',
16123 errstr => '\'llc\' not supported on',
16124 };
16125 }
16126
16127 foreach (DLTs_without 'wlan') {
16128 # gen_p80211_type() -> default
16129 push @reject_tests, {
16130 name => "type_data_${_}",
16131 DLT => $_,
16132 expr => 'type data',
16133 errstr => '\'type/subtype\' not supported on',
16134 };
16135 # gen_p80211_fcdir() -> default
16136 push @reject_tests, {
16137 name => "dir_fromds_${_}",
16138 DLT => $_,
16139 expr => 'dir fromds',
16140 errstr => '\'dir\' not supported on',
16141 };
16142 }
16143
16144 # gen_acode() -> default
16145 foreach (DLTs_without 'link_host_mac8') {
16146 push @reject_tests, {
16147 name => "link_host_21_${_}",
16148 DLT => $_,
16149 expr => 'link host $21',
16150 errstr => 'aid supported only on ARCnet',
16151 };
16152 }
16153
16154 # assert_ss7() -> default
16155 foreach (DLTs_without 'ss7') {
16156 push @reject_tests, {
16157 name => "fisu_${_}",
16158 DLT => $_,
16159 expr => 'fisu',
16160 errstr => '\'fisu\' supported only on SS7',
16161 };
16162 }
16163
16164 foreach (DLTs_without 'link_host_mac48') {
16165 # gen_gateway() -> case Q_DEFAULT -> default
16166 push @reject_tests, {
16167 name => "gateway_name_${_}",
16168 skip => skip_config_def1 ('INET6') ||
16169 skip_no_ethers() ||
16170 skip_no_hosts(),
16171 DLT => $_,
16172 expr => 'gateway eth-ipv4-noipv6.host123.libpcap.test',
16173 errstr => '\'gateway\' supported only on ethernet/FDDI/token ring/802.11/ATM LANE/Fibre Channel',
16174 };
16175 # gen_scode() -> case Q_DEFAULT -> Q_LINK
16176 push @reject_tests, {
16177 name => "link_host_name_${_}",
16178 skip => skip_no_ethers(),
16179 DLT => $_,
16180 expr => 'link host eth-noipv4-noipv6.host123.libpcap.test',
16181 errstr => 'only ethernet/FDDI/token ring/802.11/ATM LANE/Fibre Channel supports link-level host name',
16182 };
16183 }
16184
16185 # gen_inbound_outbound() -> default
16186 foreach (DLTs_without 'inout') {
16187 push @reject_tests, {
16188 name => "inbound_linux_${_}",
16189 skip => skip_os_not ('linux'),
16190 DLT => $_,
16191 expr => 'inbound',
16192 errstr => 'not a live capture',
16193 };
16194 push @reject_tests, {
16195 name => "outbound_linux_${_}",
16196 skip => skip_os_not ('linux'),
16197 DLT => $_,
16198 expr => 'outbound',
16199 errstr => 'not a live capture',
16200 };
16201 push @reject_tests, {
16202 name => "inbound_other_${_}",
16203 skip => skip_os ('linux'),
16204 DLT => $_,
16205 expr => 'inbound',
16206 errstr => 'not supported on',
16207 };
16208 push @reject_tests, {
16209 name => "outbound_other_${_}",
16210 skip => skip_os ('linux'),
16211 DLT => $_,
16212 expr => 'outbound',
16213 errstr => 'not supported on',
16214 };
16215 }
16216
16217 # assert_pflog() -> default
16218 foreach (DLTs_without 'pflog') {
16219 push @reject_tests, {
16220 name => "reason_congestion_${_}",
16221 DLT => $_,
16222 expr => 'reason congestion',
16223 errstr => '\'reason\' supported only on PFLOG linktype',
16224 };
16225 }
16226
16227 # assert_atm() -> default
16228 foreach (DLTs_without 'atm') {
16229 push @reject_tests, {
16230 name => "vpi_1_${_}",
16231 DLT => $_,
16232 expr => 'vpi 1',
16233 errstr => '\'vpi\' supported only on SUNATM',
16234 };
16235 }
16236
16237 # gen_ifindex -> default
16238 foreach (DLTs_without 'ifindex') {
16239 push @reject_tests, {
16240 name => "ifindex_1_${_}",
16241 skip => skip_os ('linux'),
16242 DLT => $_,
16243 expr => 'ifindex 1',
16244 errstr => '\'ifindex\' not supported on',
16245 };
16246 push @reject_tests, {
16247 name => "ifindex_2_${_}",
16248 skip => skip_os_not ('linux'),
16249 DLT => $_,
16250 expr => 'ifindex 2',
16251 errstr => 'not a live capture',
16252 };
16253 }
16254
16255 # the prerequisite in gen_protochain()
16256 foreach (DLTs_with 'var_off_linkpl') {
16257 push @reject_tests, {
16258 name => "protochain_4_${_}",
16259 skip => skip_config_def1 ('NO_PROTOCHAIN'),
16260 DLT => $_,
16261 expr => 'protochain 4',
16262 errstr => '\'protochain\' not supported with variable length headers',
16263 };
16264 }
16265
16266 sub accept_test_label {
16267 return join '_', ('accept', @_);
16268 }
16269
16270 sub apply_test_label {
16271 return join '_', ('apply', @_);
16272 }
16273
16274 sub reject_test_label {
16275 return join '_', ('reject', @_);
16276 }
16277
16278 sub time_test_command {
16279 my $cmdline = join ' ', @_;
16280 my $r;
16281 my $T;
16282 if (! $print_passed) {
16283 $r = system $cmdline;
16284 } else {
16285 my $t0 = Time::HiRes::time;
16286 $r = system $cmdline;
16287 $T = Time::HiRes::time - $t0;
16288 }
16289 return ($r >>= 8, $T);
16290 }
16291
16292 sub validate_stdout_test {
16293 my ($r, $T) = time_test_command @_;
16294
16295 return result_timed_out 'filtertest timeout' if $r == TIMED_OUT;
16296
16297 return result_failed (
16298 'filtertest error',
16299 file_get_contents mytmpfile $filename_stdout
16300 ) if $r;
16301
16302 return result_failed (
16303 'diff error',
16304 file_get_contents mytmpfile $filename_diags
16305 ) if system sprintf "diff $diff_flags %s %s >%s 2>&1",
16306 mytmpfile ($filename_expected),
16307 mytmpfile ($filename_stdout),
16308 mytmpfile ($filename_diags);
16309
16310 return result_passed $T;
16311 }
16312
16313 sub common_filtertest_args {
16314 my $test = shift;
16315 # BSD timeout(1) does not implement --verbose.
16316 my @args = defined $timeout_bin ? ($timeout_bin, $test_timeout) : ();
16317 push @args, $filtertest;
16318 push @args, ('-s', $test->{snaplen}) if defined $test->{snaplen};
16319 push @args, ('-m', $test->{netmask}) if defined $test->{netmask};
16320 push @args, '-O' unless $test->{optimize};
16321 push @args, '-l' if $test->{linuxext};
16322 return @args;
16323 }
16324
16325 sub run_accept_test {
16326 my $test = shift;
16327 my @args = common_filtertest_args $test;
16328 # Write the filter expression to a file because the version of
16329 # system() that takes a list does not support redirecting stdout,
16330 # and the version of system() that takes a string does not escape
16331 # special characters in the filter expression, which becomes
16332 # invalid shell syntax.
16333 file_put_contents mytmpfile ($filename_filter), $test->{expr};
16334 file_put_contents mytmpfile ($filename_expected), $test->{expected};
16335 push @args, (
16336 '-F',
16337 mytmpfile ($filename_filter),
16338 $test->{DLT},
16339 '>' . mytmpfile ($filename_stdout),
16340 "2>&1"
16341 );
16342 return validate_stdout_test @args;
16343 }
16344
16345 sub run_apply_test {
16346 my $test = shift;
16347 my @args = common_filtertest_args $test;
16348 file_put_contents mytmpfile ($filename_filter), $test->{expr};
16349 file_put_contents mytmpfile ($filename_expected), $test->{expected};
16350 push @args, (
16351 '-F',
16352 mytmpfile ($filename_filter),
16353 '-r',
16354 SAVEFILE_DIR . $test->{savefile},
16355 '>' . mytmpfile ($filename_stdout),
16356 "2>&1"
16357 );
16358 return validate_stdout_test @args;
16359 }
16360
16361 sub run_reject_test {
16362 my $test = shift;
16363 my @args = common_filtertest_args $test;
16364 file_put_contents mytmpfile ($filename_filter), $test->{expr};
16365 push @args, (
16366 '-F',
16367 mytmpfile ($filename_filter),
16368 $test->{DLT},
16369 '>' . mytmpfile ($filename_stdout),
16370 "2>&1",
16371 );
16372 my ($r, $T) = time_test_command @args;
16373
16374 return result_failed (
16375 'no filtertest error',
16376 file_get_contents mytmpfile $filename_stdout
16377 ) if $r == 0;
16378
16379 return result_timed_out 'filtertest timeout' if $r == TIMED_OUT;
16380
16381 return result_failed (
16382 "filtertest status $r",
16383 file_get_contents mytmpfile $filename_stdout
16384 ) if $r != EX_DATAERR;
16385
16386 return result_failed (
16387 'error string mismatch',
16388 file_get_contents mytmpfile $filename_stdout
16389 ) if ! string_in_file ($test->{expected}, mytmpfile $filename_stdout);
16390
16391 return result_passed $T;
16392 }
16393
16394 # Sort all hash elements by key, otherwise the pseudo-random ordering in Perl
16395 # hashes will make it difficult to compare outputs of two invocations.
16396 # Validate all accept test blocks and all reject tests, decide if this is a
16397 # "run all tests" or a "run only this specific test or test block" invocation
16398 # and produce the required test(s) using appropriate permutations of the main
16399 # expression, any aliases and the bytecode version (optimized/unoptimized).
16400 #
16401 # The resulting flat ordered list of tests includes all skipped tests at their
16402 # original positions, this makes it simple to distribute the tests and to
16403 # collect the results preserving the ordering.
16404 my @ready_to_run;
16405 foreach my $test (@accept_blocks) {
16406 if (! defined $test->{name} || $test->{name} eq '') {
16407 die "Internal error: accept test block <UNKNOWN> does not define key 'name'";
16408 }
16409 foreach ('DLT', 'aliases') {
16410 next if defined $test->{$_};
16411 die "Internal error: accept test block '$test->{name}' does not define key '$_'";
16412 }
16413 if ($test->{DLT} eq '') {
16414 die "Internal error: key 'DLT' is an empty string in apply test block '$test->{name}'";
16415 }
16416 if (! scalar @{$test->{aliases}}) {
16417 die "Internal error: accept test block '$test->{name}' defines zero aliases";
16418 } else {
16419 my %unique = map {$_ => 1} @{$test->{aliases}};
16420 if (scalar (keys %unique) != scalar @{$test->{aliases}}) {
16421 die "Internal error: accept test block '$test->{name}' defines duplicate aliases";
16422 }
16423 }
16424 if (! defined $test->{unopt} && ! defined $test->{opt}) {
16425 die "Internal error: accept test block '$test->{name}' defines neither 'unopt' nor 'opt'";
16426 }
16427 # Make the number of skip requests equal to the number of tests, but
16428 # provide the reason for the first skip request only. This avoid wasting
16429 # the vertical scroll space when skipping test blocks with many aliases.
16430 my $skip_reason = (defined $test->{skip} && $test->{skip} ne '') ?
16431 $test->{skip} : undef;
16432 foreach my $optunopt ('unopt', 'opt') {
16433 next unless defined $test->{$optunopt};
16434
16435 if (defined $skip_reason) {
16436 my $i = 0;
16437 foreach (@{$test->{aliases}}) {
16438 my $label = accept_test_label $test->{name}, $optunopt, $i++;
16439 next if defined $only_one && $only_one ne $label;
16440 push @ready_to_run, {
16441 label => $label,
16442 func => \&run_skip_test,
16443 skip => $print_skipped ? $skip_reason : '',
16444 };
16445 $skip_reason = '';
16446 }
16447 } else {
16448 # Dedent and trim to restore the format of bpf_dump().
16449 my $multiline = '';
16450 foreach (split /^/o, $test->{$optunopt}) {
16451 $multiline .= "$1\n" if /^[\t]*(\(.+)$/o;
16452 }
16453 my $i = 0;
16454 foreach (@{$test->{aliases}}) {
16455 my $label = accept_test_label $test->{name}, $optunopt, $i++;
16456 next if defined $only_one && $only_one ne $label;
16457 push @ready_to_run, {
16458 label => $label,
16459 func => \&run_accept_test,
16460 DLT => $test->{DLT},
16461 expr => $_,
16462 snaplen => defined $test->{snaplen} ? $test->{snaplen} : undef,
16463 netmask => defined $test->{netmask} ? $test->{netmask} : undef,
16464 optimize => int ($optunopt eq 'opt'),
16465 linuxext => defined $test->{linuxext} && $test->{linuxext} == 1,
16466 expected => $multiline,
16467 };
16468 }
16469 }
16470 }
16471 }
16472 foreach my $block (@apply_blocks) {
16473 if (! defined $block->{name} || $block->{name} eq '') {
16474 die "Internal error: apply test block <UNKNOWN> does not define key 'name'";
16475 }
16476 foreach ('savefile', 'expr', 'results') {
16477 next if defined $block->{$_};
16478 die "Internal error: apply test block '$block->{name}' does not define key '$_'";
16479 }
16480 foreach ('savefile', 'expr') {
16481 next if $block->{$_} ne '';
16482 die "Internal error: key '$_' is an empty string in apply test block '$block->{name}'";
16483 }
16484 if (! scalar @{$block->{results}}) {
16485 die "Internal error: apply test block '$block->{name}' defines zero results";
16486 }
16487 my $skip_reason = (defined $block->{skip} && $block->{skip} ne '') ?
16488 $block->{skip} : undef;
16489 # Convert the array to filtertest output format.
16490 my $multiline = join ("\n", @{$block->{results}}) . "\n";
16491 foreach my $optunopt ('unopt', 'opt') {
16492 my $label = apply_test_label ($block->{name}, $optunopt);
16493 next if defined $only_one && $only_one ne $label;
16494
16495 if (defined $skip_reason) {
16496 push @ready_to_run, {
16497 label => $label,
16498 func => \&run_skip_test,
16499 skip => $print_skipped ? $skip_reason : '',
16500 };
16501 $skip_reason = '';
16502 next;
16503 }
16504
16505 push @ready_to_run, {
16506 label => $label,
16507 func => \&run_apply_test,
16508 netmask => defined $block->{netmask} ? $block->{netmask} : undef,
16509 optimize => int ($optunopt eq 'opt'),
16510 expr => $block->{expr},
16511 expected => $multiline,
16512 savefile => $block->{savefile},
16513 };
16514 }
16515 }
16516 foreach my $test (@reject_tests) {
16517 if (! defined $test->{name} || $test->{name} eq '') {
16518 die "Internal error: reject test <UNKNOWN> does not define key 'name'";
16519 }
16520 foreach ('DLT', 'expr', 'errstr') {
16521 next if defined $test->{$_} && $test->{$_} ne '';
16522 die "Internal error: reject test '$test->{name}' does not define key '$_'";
16523 }
16524 my $label = reject_test_label $test->{name};
16525 next if defined $only_one && $only_one ne $label;
16526
16527 if (defined $test->{skip} && $test->{skip} ne '') {
16528 push @ready_to_run, {
16529 label => $label,
16530 func => \&run_skip_test,
16531 skip => $print_skipped ? $test->{skip} : '',
16532 };
16533 } else {
16534 push @ready_to_run, {
16535 label => $label,
16536 func => \&run_reject_test,
16537 DLT => $test->{DLT},
16538 netmask => defined $test->{netmask} ? $test->{netmask} : undef,
16539 expr => $test->{expr},
16540 expected => $test->{errstr},
16541 };
16542 }
16543 }
16544
16545 if (! scalar @ready_to_run) {
16546 die "ERROR: Unknown test label '${only_one}'" if defined $only_one;
16547 die 'Internal error: no tests defined to run!'
16548 }
16549 if ($only_list) {
16550 print $_->{label} . "\n" foreach @ready_to_run;
16551 exit EX_OK;
16552 }
16553
16554 $diff_flags = get_diff_flags;
16555
16556 $filtertest = defined $ENV{FILTERTEST_BIN} ? $ENV{FILTERTEST_BIN} :
16557 string_in_file ('/* cmakeconfig.h.in */', $config_h) ? './run/filtertest' :
16558 './testprogs/filtertest';
16559
16560 # In this libpcap version "filtertest -h" prints to stdout and exits normally.
16561 if (system ("$filtertest -h >/dev/null 2>&1") >> 8) {
16562 # Make it easier to see what the problem is.
16563 system $filtertest;
16564 print STDERR "ERROR: $filtertest is not usable\n";
16565 exit 2;
16566 }
16567
16568 # Every test in this file uses an expression that under normal conditions takes
16569 # well under one second to process, so if a filtertest invocation is taking
16570 # longer, it is likely a regression. Or an invocation via Valgrind, which
16571 # demands a sensible host-specific override of the timeout value.
16572 $test_timeout = defined $ENV{FILTERTEST_TIMEOUT} ?
16573 $ENV{FILTERTEST_TIMEOUT} : 1;
16574
16575 if ($test_timeout eq '0') {
16576 print "INFO: Not using a test timeout (FILTERTEST_TIMEOUT=0).\n";
16577 } elsif (defined $ENV{TIMEOUT_BIN}) {
16578 $timeout_bin = $ENV{TIMEOUT_BIN};
16579 if (system ($timeout_bin, '0.1', 'sleep', '10') >> 8 != TIMED_OUT) {
16580 print STDERR "ERROR: TIMEOUT_BIN='$timeout_bin' is not usable.\n";
16581 exit 1;
16582 }
16583 print "INFO: Using a test timeout of $test_timeout (TIMEOUT_BIN='$timeout_bin').\n";
16584 } elsif (system ('timeout', '0.1', 'sleep', '10') >> 8 != TIMED_OUT) {
16585 print "WARNING: Not using a test timeout (the default 'timeout' is not usable).\n";
16586 } else {
16587 $timeout_bin = 'timeout';
16588 printf "INFO: Using a test timeout of %s.\n", $test_timeout;
16589 }
16590
16591 init_tmpdir 'libpcap_TESTrun';
16592 exit test_and_report @ready_to_run;