diff options
author | phk <phk@FreeBSD.org> | 2001-02-18 09:34:55 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2001-02-18 09:34:55 +0000 |
commit | e33961c592de488d19f161d134c40f24205322d3 (patch) | |
tree | ca2f52b1634e8f34bb68044a57bd942bc45098fb /sys/netinet/ip_icmp.c | |
parent | 15fc7bce144d9639f026ee520c9e1b67f6b926ad (diff) | |
download | FreeBSD-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.c | 48 |
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: |