svn commit: r332894 - in head: cddl/lib/libdtrace sys/kern sys/netinet sys/netinet6 sys/sys

Mark Johnston markj at FreeBSD.org
Tue Apr 24 19:18:35 UTC 2018


On Mon, Apr 23, 2018 at 07:51:00PM +0000, Sean Bruno wrote:
> Author: sbruno
> Date: Mon Apr 23 19:51:00 2018
> New Revision: 332894
> URL: https://svnweb.freebsd.org/changeset/base/332894
> 
> Log:
>   Load balance sockets with new SO_REUSEPORT_LB option
>   
>   This patch adds a new socket option, SO_REUSEPORT_LB, which allow multiple
>   programs or threads to bind to the same port and incoming connections will be
>   load balanced using a hash function.
>   
>   Most of the code was copied from a similar patch for DragonflyBSD.
>   
>   However, in DragonflyBSD, load balancing is a global on/off setting and can not
>   be set per socket. This patch allows for simultaneous use of both the current
>   SO_REUSEPORT and the new SO_REUSEPORT_LB options on the same system.
>   
>   Required changes to structures
>   Globally change so_options from 16 to 32 bit value to allow for more options.
>   Add hashtable in pcbinfo to hold all SO_REUSEPORT_LB sockets.
>   
>   Limitations
>   As DragonflyBSD, a load balance group is limited to 256 pcbs
>   (256 programs or threads sharing the same socket).
>   
>   Submitted by:	Johannes Lundberg <johanlun0 at gmail.com>
>   Sponsored by:	Limelight Networks
>   Differential Revision:	https://reviews.freebsd.org/D11003
> 
> Modified:
>   head/cddl/lib/libdtrace/tcp.d
>   head/sys/kern/uipc_debug.c
>   head/sys/kern/uipc_socket.c
>   head/sys/netinet/in_pcb.c
>   head/sys/netinet/in_pcb.h
>   head/sys/netinet/ip_output.c
>   head/sys/netinet/tcp_subr.c
>   head/sys/netinet/udp_usrreq.c
>   head/sys/netinet6/in6_pcb.c
>   head/sys/netinet6/in6_src.c
>   head/sys/netinet6/ip6_output.c
>   head/sys/netinet6/udp6_usrreq.c
>   head/sys/sys/socket.h
>   head/sys/sys/socketvar.h
> 
> Modified: head/cddl/lib/libdtrace/tcp.d
> ==============================================================================
> --- head/cddl/lib/libdtrace/tcp.d	Mon Apr 23 18:33:26 2018	(r332893)
> +++ head/cddl/lib/libdtrace/tcp.d	Mon Apr 23 19:51:00 2018	(r332894)
> @@ -192,12 +192,12 @@ translator tcpsinfo_t < struct tcpcb *p > {
>  	tcps_rport =		p == NULL ? 0 : ntohs(p->t_inpcb->inp_inc.inc_ie.ie_fport);
>  	tcps_laddr =		p == NULL ? 0 :
>  	    p->t_inpcb->inp_vflag == INP_IPV4 ?
> -	    inet_ntoa(&p->t_inpcb->inp_inc.inc_ie.ie_dependladdr.ie46_local.ia46_addr4.s_addr) :
> -	    inet_ntoa6(&p->t_inpcb->inp_inc.inc_ie.ie_dependladdr.ie6_local);
> +	    inet_ntoa(&p->t_inpcb->inp_inc.inc_ie.ie_dependladdr.id46_addr.ia46_addr4.s_addr) :
> +	    inet_ntoa6(&p->t_inpcb->inp_inc.inc_ie.ie_dependladdr.id6_addr);
>  	tcps_raddr =		p == NULL ? 0 :
>  	    p->t_inpcb->inp_vflag == INP_IPV4 ?
> -	    inet_ntoa(&p->t_inpcb->inp_inc.inc_ie.ie_dependfaddr.ie46_foreign.ia46_addr4.s_addr) :
> -	    inet_ntoa6(&p->t_inpcb->inp_inc.inc_ie.ie_dependfaddr.ie6_foreign);
> +	    inet_ntoa(&p->t_inpcb->inp_inc.inc_ie.ie_dependfaddr.id46_addr.ia46_addr4.s_addr) :
> +	    inet_ntoa6(&p->t_inpcb->inp_inc.inc_ie.ie_dependfaddr.id6_addr);
>  	tcps_state =		p == NULL ? -1 : p->t_state;
>  	tcps_iss =		p == NULL ? 0  : p->iss;
>  	tcps_irs =		p == NULL ? 0  : p->irs;

A similar change is needed in udp.d. Without it, libdtrace fails to
compile its libraries when initializing a consumer, so dtrace(1) is
currently unusable on head without "-x nolibs".


More information about the svn-src-all mailing list