From owner-svn-src-head@freebsd.org Fri Aug 19 05:50:51 2016 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 54AE0BBEC01; Fri, 19 Aug 2016 05:50:51 +0000 (UTC) (envelope-from zec@fer.hr) Received: from mail.fer.hr (mail.fer.hr [161.53.72.233]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client CN "mail.fer.hr", Issuer "TERENA SSL CA 3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A7A371366; Fri, 19 Aug 2016 05:50:49 +0000 (UTC) (envelope-from zec@fer.hr) Received: from x23 (31.147.40.243) by MAIL.fer.hr (161.53.72.233) with Microsoft SMTP Server (TLS) id 14.3.279.2; Fri, 19 Aug 2016 07:49:31 +0200 Date: Fri, 19 Aug 2016 07:49:20 +0200 From: Marko Zec To: Ryan Stone CC: , , Subject: Re: svn commit: r304436 - in head: . sys/netinet Message-ID: <20160819074920.52c46f57@x23> In-Reply-To: <201608182259.u7IMx5oW002018@repo.freebsd.org> References: <201608182259.u7IMx5oW002018@repo.freebsd.org> X-Mailer: Claws Mail 3.13.2 (GTK+ 2.24.29; amd64-portbld-freebsd10.1) MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Originating-IP: [31.147.40.243] X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Aug 2016 05:50:51 -0000 On Thu, 18 Aug 2016 22:59:05 +0000 Ryan Stone wrote: > Author: rstone > Date: Thu Aug 18 22:59:05 2016 > New Revision: 304436 > URL: https://svnweb.freebsd.org/changeset/base/304436 > > Log: > Don't check for broadcast IPs on non-bcast pkts > > in_broadcast() can be quite expensive, so skip calling it if the > incoming mbuf wasn't sent to a broadcast L2 address in the first > place. > > Reviewed by: gnn > MFC after: 2 months > Sponsored by: EMC / Isilon Storage Division > Differential Revision: https://reviews.freebsd.org/D7309 > > Modified: > head/UPDATING > head/sys/netinet/udp_usrreq.c > > Modified: head/UPDATING > ============================================================================== > --- head/UPDATING Thu Aug 18 22:59:00 2016 (r304435) > +++ head/UPDATING Thu Aug 18 22:59:05 2016 (r304436) > @@ -32,6 +32,14 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 12 > "ln -s 'abort:false,junk:false' /etc/malloc.conf".) > > 20160818: > + The UDP receive code has been updated to only treat incoming > UDP > + packets that were addressed to an L2 broadcast address as L3 > + broadcast packets. It is not expected that this will affect > any > + standards-conforming UDP application. The new behaviour can > be > + disabled by setting the sysctl net.inet.udp.require_l2_bcast > to > + 0. > + > +20160818: > Remove the openbsd_poll system call. > __FreeBSD_version has been bumped because of this. > > > Modified: head/sys/netinet/udp_usrreq.c > ============================================================================== > --- head/sys/netinet/udp_usrreq.c Thu Aug 18 22:59:00 > 2016 (r304435) +++ head/sys/netinet/udp_usrreq.c Thu > Aug 18 22:59:05 2016 (r304436) @@ -126,6 +126,11 @@ > SYSCTL_INT(_net_inet_udp, OID_AUTO, blac &VNET_NAME(udp_blackhole), 0, > "Do not send port unreachables for refused connects"); > > +static VNET_DEFINE(int, udp_require_l2_bcast) = 1; > +SYSCTL_INT(_net_inet_udp, OID_AUTO, require_l2_bcast, CTLFLAG_VNET | > CTLFLAG_RW, > + &VNET_NAME(udp_require_l2_bcast), 0, > + "Only treat packets sent to an L2 broadcast address as broadcast > packets"); + > u_long udp_sendspace = 9216; /* really max > datagram size */ SYSCTL_ULONG(_net_inet_udp, UDPCTL_MAXDGRAM, > maxdgram, CTLFLAG_RW, &udp_sendspace, 0, "Maximum outgoing UDP > datagram size"); @@ -523,7 +528,8 @@ udp_input(struct mbuf **mp, int > *offp, i > pcbinfo = udp_get_inpcbinfo(proto); > if (IN_MULTICAST(ntohl(ip->ip_dst.s_addr)) || > - in_broadcast(ip->ip_dst, ifp)) { > + ((!VNET_NAME(udp_require_l2_bcast) || m->m_flags & > M_BCAST) && > + in_broadcast(ip->ip_dst, ifp))) { > struct inpcb *last; > struct inpcbhead *pcblist; > struct ip_moptions *imo; > VNET_NAME() macros should be used only within SYSCTL_* macros, otherwise (if I recall it correctly) this won't work with options VIMAGE enabled, so please don't use VNET_NAME() inside function bodies, or anywhere else. An accessor macro needs to resolve the variable inside the curvnet, and VNET() is the macro which accomplishes that, while VNET_NAME() doesn't. The norm is to declare an abbreviated accessor macro along the VNET_DEFINE() variable declaration, such as: #define V_udp_require_l2_bcast VNET(udp_require_l2_bcast) and then to use that accessor macro throught the rest of the code. Marko