From owner-freebsd-net Tue Mar 27 8:36:59 2001 Delivered-To: freebsd-net@freebsd.org Received: from freesbee.wheel.dk (freesbee.wheel.dk [193.162.159.97]) by hub.freebsd.org (Postfix) with ESMTP id 233CC37B71B; Tue, 27 Mar 2001 08:36:47 -0800 (PST) (envelope-from jesper@skriver.dk) Received: by freesbee.wheel.dk (Postfix, from userid 1001) id 5F4965D68; Tue, 27 Mar 2001 18:36:46 +0200 (CEST) Date: Tue, 27 Mar 2001 18:36:46 +0200 From: Jesper Skriver To: Jonathan Lemon Cc: Jeroen Ruigrok/Asmodai , Bill Fenner , net@freebsd.org, jlemon@freebsd.org Subject: Re: 4.3 issue: new ICMP handling broke date(1) Message-ID: <20010327183646.A75484@skriver.dk> References: <200103261557.JAA08568@windsor.research.att.com> <20010327124531.O68667@daemon.ninth-circle.org> <20010327131246.A71551@skriver.dk> <20010327101922.N93687@prism.flugsvamp.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <20010327101922.N93687@prism.flugsvamp.com>; from jlemon@flugsvamp.com on Tue, Mar 27, 2001 at 10:19:22AM -0600 X-PGP-Fingerprint: 6B88 9CE8 66E9 E631 C9C5 5EB4 22AB F0EC F956 1C31 X-PGP-Public-Key: http://freesbee.wheel.dk/~jesper/gpgkey.pub Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On Tue, Mar 27, 2001 at 10:19:22AM -0600, Jonathan Lemon wrote: > On Tue, Mar 27, 2001 at 01:12:47PM +0200, Jesper Skriver wrote: > > On Tue, Mar 27, 2001 at 12:45:31PM +0200, Jeroen Ruigrok/Asmodai wrote: > > > [making sure Jesper and Jonathan see this] > > > > > > -On [20010326 18:00], Bill Fenner (fenner@research.att.com) wrote: > > > >Now that an ICMP port unreachable returns ENETRESET and not ECONNREFUSED, > > > >setting the date on the command line results in a bogusly-reported error. > > > >Before you fix the bug in date/netdate.c, it tends to report EADDRINUSE; > > > >afterwards it tends to report ENETRESET. > > > > > > > >Why did the handling of "udp port unreachable" have to change? ECONNREFUSED > > > >was a perfectly fine return value for that. I'm reasonably sure that > > > >there are other programs out there that think that ECONNREFUSED is what > > > >you get when you get an ICMP port unreachable back after a UDP send, > > > >so I doubt that the answer is to simply fix date(1). > > > > > > FWIW I think the correct thing would be to return ECONNREFUSED. > > > > > > Looking at intro(2) it would seem that ECONNREFUSED fits the shoe since > > > the connection is actively refused. > > I forget why I picked ENETRESET; probably because it was the first > thing that leaped out at me when I quickly skimmed over > looking for an appropriate error code; but I didn't consider the UDP > case. That is the below diff Index: src/sys/netinet/ip_input.c =================================================================== RCS file: /home/ncvs/src/sys/netinet/ip_input.c,v retrieving revision 1.130.2.21 diff -u -r1.130.2.21 ip_input.c --- src/sys/netinet/ip_input.c 2001/03/08 23:14:54 1.130.2.21 +++ src/sys/netinet/ip_input.c 2001/03/27 16:35:15 @@ -1484,7 +1484,7 @@ EHOSTUNREACH, EHOSTUNREACH, ECONNREFUSED, ECONNREFUSED, EMSGSIZE, EHOSTUNREACH, 0, 0, 0, 0, 0, 0, - ENOPROTOOPT, ENETRESET + ENOPROTOOPT, ECONNREFUSED }; /* or perhaps this ? Index: src/sys/netinet/ip_icmp.c =================================================================== RCS file: /home/ncvs/src/sys/netinet/ip_icmp.c,v retrieving revision 1.39.2.6 diff -u -r1.39.2.6 ip_icmp.c --- src/sys/netinet/ip_icmp.c 2001/03/08 23:14:54 1.39.2.6 +++ src/sys/netinet/ip_icmp.c 2001/03/27 16:30:51 @@ -350,7 +350,7 @@ */ case ICMP_UNREACH_PROTOCOL: case ICMP_UNREACH_PORT: - code = PRC_UNREACH_ADMIN_PROHIB; + code = PRC_UNREACH_PORT; break; case ICMP_UNREACH_NET_PROHIB: Index: src/sys/netinet/tcp_subr.c =================================================================== RCS file: /home/ncvs/src/sys/netinet/tcp_subr.c,v retrieving revision 1.73.2.11 diff -u -r1.73.2.11 tcp_subr.c --- src/sys/netinet/tcp_subr.c 2001/03/05 13:09:03 1.73.2.11 +++ src/sys/netinet/tcp_subr.c 2001/03/27 16:32:01 @@ -978,7 +978,8 @@ if (cmd == PRC_QUENCH) notify = tcp_quench; - else if (icmp_may_rst && cmd == PRC_UNREACH_ADMIN_PROHIB && ip) + else if (icmp_may_rst && (cmd == PRC_UNREACH_ADMIN_PROHIB || + cmd == PRC_UNREACH_PORT) && ip) notify = tcp_drop_syn_sent; else if (cmd == PRC_MSGSIZE) notify = tcp_mtudisc; /Jesper -- Jesper Skriver, jesper(at)skriver(dot)dk - CCIE #5456 Work: Network manager @ AS3292 (Tele Danmark DataNetworks) Private: FreeBSD committer @ AS2109 (A much smaller network ;-) One Unix to rule them all, One Resolver to find them, One IP to bring them all and in the zone to bind them. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message