svn commit: r304436 - in head: . sys/netinet
Bruce Simpson
bms at fastmail.net
Sat Aug 20 11:43:03 UTC 2016
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;
>
More information about the svn-src-head
mailing list