summaryrefslogtreecommitdiff
path: root/sys/netinet/ip_icmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netinet/ip_icmp.c')
-rw-r--r--sys/netinet/ip_icmp.c48
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: