Date: Sat, 20 Aug 2016 12:33:05 +0100 From: Bruce Simpson <bms@fastmail.net> To: Ryan Stone <rstone@FreeBSD.org>, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r304436 - in head: . sys/netinet Message-ID: <4fbc2e1d-3a62-5963-83d5-f9c931503e51@fastmail.net> In-Reply-To: <201608182259.u7IMx5oW002018@repo.freebsd.org> References: <201608182259.u7IMx5oW002018@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
This potentially breaks reception of IPv4 broadcasts where FreeBSD is the endpoint at the end of a P2P interface, or other forms of links, where there is no guarantee that the link layer will set M_BCAST (or indeed M_MCAST). On 18/08/16 23:59, 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; >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4fbc2e1d-3a62-5963-83d5-f9c931503e51>