summaryrefslogtreecommitdiffstats
path: root/sys/netinet/ip_icmp.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2001-02-18 09:34:55 +0000
committerphk <phk@FreeBSD.org>2001-02-18 09:34:55 +0000
commite33961c592de488d19f161d134c40f24205322d3 (patch)
treeca2f52b1634e8f34bb68044a57bd942bc45098fb /sys/netinet/ip_icmp.c
parent15fc7bce144d9639f026ee520c9e1b67f6b926ad (diff)
downloadFreeBSD-src-e33961c592de488d19f161d134c40f24205322d3.zip
FreeBSD-src-e33961c592de488d19f161d134c40f24205322d3.tar.gz
Remove unneeded loop increment in src/sys/netinet/in_pcb.c:in_pcbnotify
Add new PRC_UNREACH_ADMIN_PROHIB in sys/sys/protosw.h Remove condition on TCP in src/sys/netinet/ip_icmp.c:icmp_input In src/sys/netinet/ip_icmp.c:icmp_input set code = PRC_UNREACH_ADMIN_PROHIB or PRC_UNREACH_HOST for all unreachables except ICMP_UNREACH_NEEDFRAG Rename sysctl icmp_admin_prohib_like_rst to icmp_unreach_like_rst to reflect the fact that we also react on ICMP unreachables that are not administrative prohibited. Also update the comments to reflect this. In sys/netinet/tcp_subr.c:tcp_ctlinput add code to treat PRC_UNREACH_ADMIN_PROHIB and PRC_UNREACH_HOST different. PR: 23986 Submitted by: Jesper Skriver <jesper@skriver.dk>
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 6a277aa..1ca4c30 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:
OpenPOWER on IntegriCloud