return (u_int16_t)proto;
}
-/* proto means IPv6 extension header ? */
+/* These are invalid numbers as upper layer protocol */
static int is_exthdr(u_int16_t proto)
{
- return (proto == IPPROTO_HOPOPTS ||
- proto == IPPROTO_ROUTING ||
+ return (proto == IPPROTO_ROUTING ||
proto == IPPROTO_FRAGMENT ||
- proto == IPPROTO_ESP ||
proto == IPPROTO_AH ||
proto == IPPROTO_DSTOPTS);
}
exit_error(PARAMETER_PROBLEM,
"rule would never match protocol");
- if (fw.ipv6.proto != IPPROTO_ESP &&
- is_exthdr(fw.ipv6.proto))
+ if (is_exthdr(fw.ipv6.proto)
+ && (fw.ipv6.invflags & IP6T_INV_PROTO) == 0)
printf("Warning: never matched protocol: %s. "
- "use exension match instead.", protocol);
+ "use extension match instead.\n",
+ protocol);
break;
case 's':