diff options
Diffstat (limited to 'sys/netinet/ip_icmp.c')
| -rw-r--r-- | sys/netinet/ip_icmp.c | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/sys/netinet/ip_icmp.c b/sys/netinet/ip_icmp.c index 6a277aafbd44..1ca4c3015b7b 100644 --- a/sys/netinet/ip_icmp.c +++ b/sys/netinet/ip_icmp.c @@ -315,11 +315,23 @@ icmp_input(m, off, proto) case ICMP_UNREACH: switch (code) { case ICMP_UNREACH_NET: + code = PRC_UNREACH_HOST; + break; + case ICMP_UNREACH_HOST: + code = PRC_UNREACH_HOST; + break; + case ICMP_UNREACH_PROTOCOL: + code = PRC_UNREACH_HOST; + break; + case ICMP_UNREACH_PORT: + code = PRC_UNREACH_HOST; + break; + case ICMP_UNREACH_SRCFAIL: - code += PRC_UNREACH_NET; + code = PRC_UNREACH_HOST; break; case ICMP_UNREACH_NEEDFRAG: @@ -327,37 +339,43 @@ icmp_input(m, off, proto) break; case ICMP_UNREACH_NET_UNKNOWN: + code = PRC_UNREACH_HOST; + break; + case ICMP_UNREACH_NET_PROHIB: - if (icp->icmp_ip.ip_p == IPPROTO_TCP) { - code = PRC_UNREACH_PORT; - break; - } + code = PRC_UNREACH_ADMIN_PROHIB; + break; case ICMP_UNREACH_TOSNET: - code = PRC_UNREACH_NET; + code = PRC_UNREACH_HOST; break; case ICMP_UNREACH_HOST_UNKNOWN: + code = PRC_UNREACH_HOST; + break; + case ICMP_UNREACH_ISOLATED: + code = PRC_UNREACH_HOST; + break; + case ICMP_UNREACH_HOST_PROHIB: - if (icp->icmp_ip.ip_p == IPPROTO_TCP) { - code = PRC_UNREACH_PORT; - break; - } + code = PRC_UNREACH_ADMIN_PROHIB; + break; case ICMP_UNREACH_TOSHOST: code = PRC_UNREACH_HOST; break; case ICMP_UNREACH_FILTER_PROHIB: - if (icp->icmp_ip.ip_p == IPPROTO_TCP) { - code = PRC_UNREACH_PORT; - break; - } + code = PRC_UNREACH_ADMIN_PROHIB; + break; case ICMP_UNREACH_HOST_PRECEDENCE: + code = PRC_UNREACH_HOST; + break; + case ICMP_UNREACH_PRECEDENCE_CUTOFF: - code = PRC_UNREACH_PORT; + code = PRC_UNREACH_HOST; break; default: |
