From owner-freebsd-net@FreeBSD.ORG Wed Mar 13 15:22:03 2013 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 9852A359 for ; Wed, 13 Mar 2013 15:22:03 +0000 (UTC) (envelope-from mattmiller1@gmail.com) Received: from mail-qa0-f46.google.com (mail-qa0-f46.google.com [209.85.216.46]) by mx1.freebsd.org (Postfix) with ESMTP id 638A4E2A for ; Wed, 13 Mar 2013 15:22:03 +0000 (UTC) Received: by mail-qa0-f46.google.com with SMTP id o13so2288499qaj.19 for ; Wed, 13 Mar 2013 08:21:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:sender:from:date:x-google-sender-auth :message-id:subject:to:content-type; bh=YHWL/eYZcWbSm1b0J/HUDArAE3XzVLXOUrNobR32tis=; b=jZ2yvGduif1w7aQtFiQ9IVb+hU5ZozzoJGsHwiNFyg/PIMvMNx9ln7HIfTifaO8y97 dPUCrDNHnzKsFipcGiBZbOK9wIgyp/vkC/yGkgvzkkmIEo4/HIQy/f5jR+vgMvZ8J6I5 77nyDy/h25sxybIxtHDGow4xY+FnazyPfaY6sMk/tf9BGJqmcTmvNkA8Nc04CVwx+2UH ETqTs+xs0LRrUmKoCXtp3x2WjOq0UmsQ2sIgRN89Sm/JuqncIFMHsSqYLmMHNUres9ul mm6n1q+ShQBdUzomyH21ZXpbYv5qZ7rm9bL+PNC6QC8vAxRaYR/Ys22gUDsVEEbPkWvm AjRw== X-Received: by 10.49.116.52 with SMTP id jt20mr9065010qeb.32.1363188116870; Wed, 13 Mar 2013 08:21:56 -0700 (PDT) MIME-Version: 1.0 Sender: mattmiller1@gmail.com Received: by 10.49.24.166 with HTTP; Wed, 13 Mar 2013 08:21:15 -0700 (PDT) From: Matt Miller Date: Wed, 13 Mar 2013 11:21:15 -0400 X-Google-Sender-Auth: w_5p5nKFHtIzM2WsqARnhCghKOc Message-ID: Subject: ip_output() Error Handling in tcp_output() To: freebsd-net@freebsd.org Content-Type: text/plain; charset=ISO-8859-1 X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Mar 2013 15:22:03 -0000 If we have a connection that has received a SYN and ip_output() returns, say, EHOSTUNREACH, is there anything that guarantees the connection would always eventually be dropped if the condition persists? E.g., similar to this case for ENOBUFS: http://svnweb.freebsd.org/base?view=revision&revision=61179 Should we ensure that a timer is set for the EHOSTUNREACH, et al. cases too in addition to setting t_softerror? error = ip_output(m, tp->t_inpcb->inp_options, &ro, ((so->so_options & SO_DONTROUTE) ? IP_ROUTETOIF : 0), 0, tp->t_inpcb); ... switch (error) { case EPERM: tp->t_softerror = error; return (error); case ENOBUFS: if (!tcp_timer_active(tp, TT_REXMT) && !tcp_timer_active(tp, TT_PERSIST)) tcp_timer_activate(tp, TT_REXMT, tp->t_rxtcur); tp->snd_cwnd = tp->t_maxseg; return (0); ... case EHOSTDOWN: case EHOSTUNREACH: case ENETDOWN: case ENETUNREACH: if (TCPS_HAVERCVDSYN(tp->t_state)) { tp->t_softerror = error; return (0); } Thanks, Matt