Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 27 Mar 2001 18:36:46 +0200
From:      Jesper Skriver <jesper@skriver.dk>
To:        Jonathan Lemon <jlemon@flugsvamp.com>
Cc:        Jeroen Ruigrok/Asmodai <asmodai@wxs.nl>, Bill Fenner <fenner@research.att.com>, net@freebsd.org, jlemon@freebsd.org
Subject:   Re: 4.3 issue: new ICMP handling broke date(1)
Message-ID:  <20010327183646.A75484@skriver.dk>
In-Reply-To: <20010327101922.N93687@prism.flugsvamp.com>; from jlemon@flugsvamp.com on Tue, Mar 27, 2001 at 10:19:22AM -0600
References:  <200103261557.JAA08568@windsor.research.att.com> <20010327124531.O68667@daemon.ninth-circle.org> <20010327131246.A71551@skriver.dk> <20010327101922.N93687@prism.flugsvamp.com>

next in thread | previous in thread | raw e-mail | index | archive | help
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 <sys/errno.h>
> 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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010327183646.A75484>