From owner-freebsd-stable@FreeBSD.ORG Sun Nov 20 13:04:12 2005 Return-Path: X-Original-To: freebsd-stable@freebsd.org Delivered-To: freebsd-stable@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4FBEF16A41F for ; Sun, 20 Nov 2005 13:04:12 +0000 (GMT) (envelope-from rwatson@FreeBSD.org) Received: from cyrus.watson.org (cyrus.watson.org [209.31.154.42]) by mx1.FreeBSD.org (Postfix) with ESMTP id 144C943D45 for ; Sun, 20 Nov 2005 13:04:12 +0000 (GMT) (envelope-from rwatson@FreeBSD.org) Received: from fledge.watson.org (fledge.watson.org [209.31.154.41]) by cyrus.watson.org (Postfix) with ESMTP id 92A8546B7D; Sun, 20 Nov 2005 08:04:11 -0500 (EST) Date: Sun, 20 Nov 2005 13:04:11 +0000 (GMT) From: Robert Watson X-X-Sender: robert@fledge.watson.org To: Michael Voucko In-Reply-To: <437FCEAB.80000@gmx.li> Message-ID: <20051120130304.T8182@fledge.watson.org> References: <437B1466.8030202@gmx.li> <20051119165212.O88861@carver.gumbysoft.com> <437FCEAB.80000@gmx.li> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: freebsd-stable@freebsd.org Subject: Re: "message too long" when sending broadcasts X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 20 Nov 2005 13:04:12 -0000 On Sun, 20 Nov 2005, Michael Voucko wrote: > > Berkeley-derived kernels do not allow a broadcast datagram to be > fragmented. If the size of an IP datagram that is being sent to a > broadcast address exceeds the outgoing interface MTU, EMSGSIZE is > returned (pp. 233?234 of TCPv2). This is a policy decision that has > existed since 4.2BSD. There is nothing that prevents a kernel from > fragmenting a broadcast datagram, but the feeling is that broadcasting > puts enough load on the network as it is, so there is no need to > multiply this load by the number of fragments. .... AIX, FreeBSD, and > MacOS implement this limitation. Linux, Solaris, and HP-UX fragment > datagrams sent to a broadcast address. > > Maybe it's worth adding this information somewhere to make it easier to > find? It would also be quite easy to make this configurable -- the code in ip_output is fairly straight forward: /* * Look for broadcast address and * verify user is allowed to send * such a packet. */ if (isbroadcast) { if ((ifp->if_flags & IFF_BROADCAST) == 0) { error = EADDRNOTAVAIL; goto bad; } if ((flags & IP_ALLOWBROADCAST) == 0) { error = EACCES; goto bad; } /* don't allow broadcast messages to be fragmented */ if (ip->ip_len > ifp->if_mtu) { error = EMSGSIZE; goto bad; } if (flags & IP_SENDONES) ip->ip_dst.s_addr = INADDR_BROADCAST; m->m_flags |= M_BCAST; } else { m->m_flags &= ~M_BCAST; } We could add a global option, or maybe just an IP socket option. Robert N M Watson