+push @reject_tests, {
+ name => "noindex_${_}",
+ DLT => 'EN10MB',
+ expr => "${_}[0] == 0",
+ errstr => "'${_}' does not support the index operation",
+} foreach (qw{
+ ah
+ esp
+ aarp
+ iso
+ esis
+ isis
+ clnp
+ stp
+ ipx
+ netbeui
+ l1
+ l2
+ iih
+ snp
+ csnp
+ psnp
+ lsp
+});
+
+# "link host IPV4ADDR" and "link net IPV4ADDR" use a different code path with
+# a different error message and are tested above. "link net NAME" uses yet
+# another different code path with yet another different error message and is
+# tested above. "(link|ip|rarp|arp|decnet|ip6) host" can be valid syntax or
+# not (depending on the primitive ID), which is tested above.
+foreach (qw(
+ sctp
+ tcp
+ udp
+ icmp
+ igmp
+ igrp
+ atalk
+ lat
+ sca
+ moprc
+ mopdl
+ icmp6
+ ah
+ esp
+ pim
+ vrrp
+ aarp
+ iso
+ esis
+ isis
+ clnp
+ stp
+ ipx
+ netbeui
+ l1
+ l2
+ iih
+ snp
+ csnp
+ psnp
+ lsp
+ radio
+ carp
+)) {
+ # HID -> gen_ncode() -> gen_host()
+ push @reject_tests, {
+ name => "inv_qual_${_}_host_ipv4addr",
+ DLT => 'EN10MB',
+ expr => "${_} host 1.2.3.4",
+ errstr => "'${_}' is not a valid qualifier for 'ip host'",
+ };
+ # HID -> gen_ncode() -> gen_host()
+ push @reject_tests, {
+ name => "inv_qual_${_}_net_ipv4addr",
+ DLT => 'EN10MB',
+ expr => "${_} net 1.2.3.4",
+ errstr => "'${_}' is not a valid qualifier for 'ip net'",
+ };
+ # HID6 -> gen_mcode6() -> gen_host6()
+ push @reject_tests, {
+ skip => skip_config_undef ('INET6'),
+ name => "inv_qual_${_}_host_ipv6addr",
+ DLT => 'EN10MB',
+ expr => "${_} host fe80::",
+ errstr => "'${_}' is not a valid qualifier for 'ip6 host'",
+ };
+ # HID6 -> gen_mcode6() -> gen_host6()
+ push @reject_tests, {
+ skip => skip_config_undef ('INET6'),
+ name => "inv_qual_${_}_net_ipv6addr",
+ DLT => 'EN10MB',
+ expr => "${_} net fe80::",
+ errstr => "'${_}' is not a valid qualifier for 'ip6 net'",
+ };
+
+ # HID NETMASK HID -> gen_mcode()
+ push @reject_tests, {
+ name => "inv_qual_${_}_host_ipv4mask",
+ DLT => 'EN10MB',
+ expr => "${_} host 1.2.3.0 mask 255.255.255.0",
+ errstr => 'Mask syntax for networks only',
+ };
+ # HID NETMASK HID -> gen_mcode() -> gen_host()
+ push @reject_tests, {
+ name => "inv_qual_${_}_net_ipv4mask",
+ DLT => 'EN10MB',
+ expr => "${_} net 1.2.3.0 mask 255.255.255.0",
+ errstr => "'${_}' is not a valid qualifier for 'ip net'",
+ };
+ # ("mask" is IPv4-only)
+
+ # HID '/' NUM -> gen_mcode()
+ push @reject_tests, {
+ name => "inv_qual_${_}_host_ipv4cidr",
+ DLT => 'EN10MB',
+ expr => "${_} host 1.2.3.0/24",
+ errstr => 'Mask syntax for networks only',
+ };
+ # HID '/' NUM -> gen_mcode() -> gen_host()
+ push @reject_tests, {
+ name => "inv_qual_${_}_net_ipv4cidr",
+ DLT => 'EN10MB',
+ expr => "${_} net 1.2.3.0/24",
+ errstr => "'${_}' is not a valid qualifier for 'ip net'",
+ };
+ # HID6 '/' NUM -> gen_mcode6()
+ push @reject_tests, {
+ skip => skip_config_undef ('INET6'),
+ name => "inv_qual_${_}_host_ipv6cidr",
+ DLT => 'EN10MB',
+ expr => "${_} host fe80::/16",
+ errstr => 'Mask syntax for networks only',
+ };
+ # HID6 '/' NUM -> gen_mcode6() -> gen_host6()
+ push @reject_tests, {
+ skip => skip_config_undef ('INET6'),
+ name => "inv_qual_${_}_net_ipv6cidr",
+ DLT => 'EN10MB',
+ expr => "${_} net fe80::/16",
+ errstr => "'${_}' is not a valid qualifier for 'ip6 net'",
+ };
+
+ # ID -> gen_scode() -> gen_host()
+ push @reject_tests, {
+ skip => skip_no_hosts(),
+ name => "inv_qual_${_}_host_ipv4name",
+ DLT => 'EN10MB',
+ expr => "${_} host noeth-ipv4-noipv6.host123.libpcap.test",
+ errstr => "'${_}' is not a valid qualifier for 'ip host'",
+ };
+ # ID -> gen_scode() -> gen_host()
+ push @reject_tests, {
+ skip => skip_no_networks(),
+ name => "inv_qual_${_}_net_ipv4name",
+ DLT => 'EN10MB',
+ expr => "${_} net net-10-20-30-0.libpcap.test",
+ errstr => "'${_}' is not a valid qualifier for 'ip net'",
+ };
+ # ID -> gen_scode() -> gen_host6()
+ push @reject_tests, {
+ skip => skip_config_undef ('INET6') || skip_no_hosts(),
+ name => "inv_qual_${_}_host_ipv6name",
+ DLT => 'EN10MB',
+ expr => "${_} host noeth-noipv4-ipv6.host123.libpcap.test",
+ errstr => "'${_}' is not a valid qualifier for 'ip6 host'",
+ };
+ # (IPv6 networks cannot have names)
+}
+
+foreach (qw(
+ link
+ sctp
+ tcp
+ udp
+ icmp
+ igmp
+ igrp
+ atalk
+ decnet
+ lat
+ sca
+ moprc
+ mopdl
+ ip6
+ icmp6
+ ah
+ esp
+ pim
+ vrrp
+ aarp
+ iso
+ esis
+ isis
+ clnp
+ stp
+ ipx
+ netbeui
+ l1
+ l2
+ iih
+ snp
+ csnp
+ psnp
+ lsp
+ radio
+ carp
+)) {
+ # ID -> gen_scode() -> gen_host6()
+ push @reject_tests, {
+ skip => skip_config_def1 ('INET6') ||
+ skip_no_ethers() ||
+ skip_no_hosts(),
+ name => "inv_qual_${_}_gateway_ipv4name",
+ DLT => 'EN10MB',
+ expr => "${_} gateway eth-ipv4-noipv6.host123.libpcap.test",
+ errstr => "'${_}' is not a valid qualifier for 'gateway'",
+ };
+}
+