Module Name:    src
Committed By:   riastradh
Date:           Thu Aug 20 21:21:33 UTC 2020

Modified Files:
        src/sys/conf: files
        src/sys/net: Makefile files.net if_types.h
        src/sys/netinet: in.c in.h in_pcb.c in_pcb.h in_pcb_hdr.h ip_encap.c
            udp_usrreq.c udp_var.h
        src/sys/netinet6: in6_pcb.h udp6_usrreq.c
        src/sys/rump/kern/lib/libcrypto: Makefile
        src/sys/rump/net: Makefile.rumpnetcomp
        src/tests/net: Makefile
        src/usr.sbin: Makefile

Log Message:
[ozaki-r] Changes to the kernel core for wireguard


To generate a diff of this commit:
cvs rdiff -u -r1.1274 -r1.1275 src/sys/conf/files
cvs rdiff -u -r1.42 -r1.43 src/sys/net/Makefile
cvs rdiff -u -r1.25 -r1.26 src/sys/net/files.net
cvs rdiff -u -r1.29 -r1.30 src/sys/net/if_types.h
cvs rdiff -u -r1.236 -r1.237 src/sys/netinet/in.c
cvs rdiff -u -r1.109 -r1.110 src/sys/netinet/in.h
cvs rdiff -u -r1.183 -r1.184 src/sys/netinet/in_pcb.c
cvs rdiff -u -r1.66 -r1.67 src/sys/netinet/in_pcb.h
cvs rdiff -u -r1.13 -r1.14 src/sys/netinet/in_pcb_hdr.h
cvs rdiff -u -r1.72 -r1.73 src/sys/netinet/ip_encap.c
cvs rdiff -u -r1.258 -r1.259 src/sys/netinet/udp_usrreq.c
cvs rdiff -u -r1.45 -r1.46 src/sys/netinet/udp_var.h
cvs rdiff -u -r1.50 -r1.51 src/sys/netinet6/in6_pcb.h
cvs rdiff -u -r1.147 -r1.148 src/sys/netinet6/udp6_usrreq.c
cvs rdiff -u -r1.13 -r1.14 src/sys/rump/kern/lib/libcrypto/Makefile
cvs rdiff -u -r1.20 -r1.21 src/sys/rump/net/Makefile.rumpnetcomp
cvs rdiff -u -r1.34 -r1.35 src/tests/net/Makefile
cvs rdiff -u -r1.283 -r1.284 src/usr.sbin/Makefile

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/conf/files
diff -u src/sys/conf/files:1.1274 src/sys/conf/files:1.1275
--- src/sys/conf/files:1.1274	Sat Aug  1 08:20:52 2020
+++ src/sys/conf/files	Thu Aug 20 21:21:31 2020
@@ -1,4 +1,4 @@
-#	$NetBSD: files,v 1.1274 2020/08/01 08:20:52 maxv Exp $
+#	$NetBSD: files,v 1.1275 2020/08/20 21:21:31 riastradh Exp $
 #	@(#)files.newconf	7.5 (Berkeley) 5/10/93
 
 version 	20171118
@@ -217,6 +217,12 @@ include "crypto/nist_hash_drbg/files.nis
 # ChaCha-based fast PRNG
 include "crypto/cprng_fast/files.cprng_fast"
 
+# BLAKE2s, a cryptographic hash function optimized for 8- to 32-bit
+include "crypto/blake2/files.blake2s"
+
+# Various cryptography functions
+include "crypto/sodium/files.sodium"
+
 #
 # Kernel history/tracing. Old UVMHIST depends upon this.
 #
@@ -1427,6 +1433,7 @@ defpseudo carp:		ifnet, ether, arp
 defpseudodev l2tp:	ifnet, ether, arp
 defpseudo canloop:	ifnet
 defpseudo ipsecif:	ifnet		# avoid to confuse ipsec itself option
+defpseudo wg:		ifnet, blake2s, libsodium
 
 defpseudo sequencer
 defpseudo clockctl

Index: src/sys/net/Makefile
diff -u src/sys/net/Makefile:1.42 src/sys/net/Makefile:1.43
--- src/sys/net/Makefile:1.42	Wed Jan 29 03:16:28 2020
+++ src/sys/net/Makefile	Thu Aug 20 21:21:32 2020
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.42 2020/01/29 03:16:28 thorpej Exp $
+#	$NetBSD: Makefile,v 1.43 2020/08/20 21:21:32 riastradh Exp $
 
 INCSDIR= /usr/include/net
 
@@ -6,7 +6,7 @@ INCS=	bpf.h bpfjit.h bpfdesc.h dlt.h eth
 	if_bridgevar.h if_dl.h if_ether.h if_gif.h \
 	if_gre.h if_ieee1394.h if_ipsec.h if_llc.h if_media.h if_mpls.h \
 	if_pflog.h if_ppp.h if_pppoe.h if_l2tp.h if_sppp.h if_srt.h if_stats.h \
-	if_stf.h if_tap.h if_tun.h if_types.h if_vlanvar.h net_stats.h \
+	if_stf.h if_tap.h if_tun.h if_types.h if_vlanvar.h if_wg.h net_stats.h \
 	netisr.h pfil.h pfkeyv2.h pfvar.h ppp-comp.h ppp_defs.h radix.h \
 	raw_cb.h route.h slcompress.h slip.h zlib.h
 

Index: src/sys/net/files.net
diff -u src/sys/net/files.net:1.25 src/sys/net/files.net:1.26
--- src/sys/net/files.net:1.25	Wed Jan 29 03:16:28 2020
+++ src/sys/net/files.net	Thu Aug 20 21:21:32 2020
@@ -1,4 +1,4 @@
-#	$NetBSD: files.net,v 1.25 2020/01/29 03:16:28 thorpej Exp $
+#	$NetBSD: files.net,v 1.26 2020/08/20 21:21:32 riastradh Exp $
 
 # XXX CLEANUP
 define	net
@@ -33,6 +33,7 @@ file	net/if_tap.c			tap
 file	net/if_tun.c			tun
 file	net/if_vlan.c			vlan			needs-flag
 file	net/if_pppoe.c			pppoe			needs-flag
+file	net/if_wg.c			wg			needs-flag
 file	net/pfil.c			net
 file	net/ppp-deflate.c		ppp & ppp_deflate
 file	net/ppp_tty.c			ppp

Index: src/sys/net/if_types.h
diff -u src/sys/net/if_types.h:1.29 src/sys/net/if_types.h:1.30
--- src/sys/net/if_types.h:1.29	Tue Jul 31 16:44:30 2018
+++ src/sys/net/if_types.h	Thu Aug 20 21:21:32 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_types.h,v 1.29 2018/07/31 16:44:30 khorben Exp $	*/
+/*	$NetBSD: if_types.h,v 1.30 2020/08/20 21:21:32 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993, 1994
@@ -267,5 +267,6 @@
 #define IFT_CARP	0xf8		/* Common Address Redundancy Protocol */
 #define IFT_IPSEC	0xf9		/* IPsec I/F */
 #define IFT_MBIM	0xfa		/* Mobile Broadband Interface Model */
+#define IFT_WIREGUARD	0xfb		/* WireGuard */
 
 #endif /* !_NET_IF_TYPES_H_ */

Index: src/sys/netinet/in.c
diff -u src/sys/netinet/in.c:1.236 src/sys/netinet/in.c:1.237
--- src/sys/netinet/in.c:1.236	Wed Dec 18 00:49:15 2019
+++ src/sys/netinet/in.c	Thu Aug 20 21:21:32 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: in.c,v 1.236 2019/12/18 00:49:15 roy Exp $	*/
+/*	$NetBSD: in.c,v 1.237 2020/08/20 21:21:32 riastradh Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -91,7 +91,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: in.c,v 1.236 2019/12/18 00:49:15 roy Exp $");
+__KERNEL_RCSID(0, "$NetBSD: in.c,v 1.237 2020/08/20 21:21:32 riastradh Exp $");
 
 #include "arp.h"
 
@@ -145,7 +145,6 @@ __KERNEL_RCSID(0, "$NetBSD: in.c,v 1.236
 #endif
 
 static u_int	in_mask2len(struct in_addr *);
-static void	in_len2mask(struct in_addr *, u_int);
 static int	in_lifaddr_ioctl(struct socket *, u_long, void *,
 	struct ifnet *);
 
@@ -380,7 +379,7 @@ in_mask2len(struct in_addr *mask)
 	return x * NBBY + y;
 }
 
-static void
+void
 in_len2mask(struct in_addr *mask, u_int len)
 {
 	u_int i;
@@ -1232,9 +1231,11 @@ in_ifinit(struct ifnet *ifp, struct in_i
 		ia->ia_dstaddr = ia->ia_addr;
 		flags |= RTF_HOST;
 	} else if (ifp->if_flags & IFF_POINTOPOINT) {
-		if (ia->ia_dstaddr.sin_family != AF_INET)
-			return (0);
-		flags |= RTF_HOST;
+		if (in_mask2len(&ia->ia_sockmask.sin_addr) == 32) {
+			if (ia->ia_dstaddr.sin_family != AF_INET)
+				return (0);
+			flags |= RTF_HOST;
+		}
 	}
 
 	/* Add the local route to the address */

Index: src/sys/netinet/in.h
diff -u src/sys/netinet/in.h:1.109 src/sys/netinet/in.h:1.110
--- src/sys/netinet/in.h:1.109	Wed Dec 18 00:49:16 2019
+++ src/sys/netinet/in.h	Thu Aug 20 21:21:32 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: in.h,v 1.109 2019/12/18 00:49:16 roy Exp $	*/
+/*	$NetBSD: in.h,v 1.110 2020/08/20 21:21:32 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -437,6 +437,8 @@ int	in4_cksum(struct mbuf *, u_int8_t, i
 int	in_localaddr(struct in_addr);
 void	in_socktrim(struct sockaddr_in *);
 
+void	in_len2mask(struct in_addr *, u_int);
+
 void	in_if_link_up(struct ifnet *);
 void	in_if_link_down(struct ifnet *);
 void	in_if_up(struct ifnet *);

Index: src/sys/netinet/in_pcb.c
diff -u src/sys/netinet/in_pcb.c:1.183 src/sys/netinet/in_pcb.c:1.184
--- src/sys/netinet/in_pcb.c:1.183	Wed May 15 02:59:18 2019
+++ src/sys/netinet/in_pcb.c	Thu Aug 20 21:21:32 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: in_pcb.c,v 1.183 2019/05/15 02:59:18 ozaki-r Exp $	*/
+/*	$NetBSD: in_pcb.c,v 1.184 2020/08/20 21:21:32 riastradh Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -93,7 +93,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: in_pcb.c,v 1.183 2019/05/15 02:59:18 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: in_pcb.c,v 1.184 2020/08/20 21:21:32 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -205,6 +205,8 @@ in_pcballoc(struct socket *so, void *v)
 	inp->inp_portalgo = PORTALGO_DEFAULT;
 	inp->inp_bindportonsend = false;
 	inp->inp_prefsrcip.s_addr = INADDR_ANY;
+	inp->inp_overudp_cb = NULL;
+	inp->inp_overudp_arg = NULL;
 #if defined(IPSEC)
 	if (ipsec_enabled) {
 		int error = ipsec_init_pcbpolicy(so, &inp->inp_sp);

Index: src/sys/netinet/in_pcb.h
diff -u src/sys/netinet/in_pcb.h:1.66 src/sys/netinet/in_pcb.h:1.67
--- src/sys/netinet/in_pcb.h:1.66	Thu May 31 07:03:57 2018
+++ src/sys/netinet/in_pcb.h	Thu Aug 20 21:21:32 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: in_pcb.h,v 1.66 2018/05/31 07:03:57 maxv Exp $	*/
+/*	$NetBSD: in_pcb.h,v 1.67 2020/08/20 21:21:32 riastradh Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -96,6 +96,8 @@ struct inpcb {
 	uint8_t	  inp_ip_minttl;
 	bool      inp_bindportonsend;
 	struct    in_addr inp_prefsrcip; /* preferred src IP when wild  */
+	pcb_overudp_cb_t inp_overudp_cb;
+	void      *inp_overudp_arg;
 };
 
 #define	inp_faddr	inp_ip.ip_dst
@@ -163,6 +165,14 @@ void	in_setsockaddr(struct inpcb *, stru
 struct rtentry *
 	in_pcbrtentry(struct inpcb *);
 void	in_pcbrtentry_unref(struct rtentry *, struct inpcb *);
+
+static inline void
+in_pcb_register_overudp_cb(struct inpcb *inp, pcb_overudp_cb_t cb, void *arg)
+{
+
+	inp->inp_overudp_cb = cb;
+	inp->inp_overudp_arg = arg;
+}
 #endif
 
 #endif /* !_NETINET_IN_PCB_H_ */

Index: src/sys/netinet/in_pcb_hdr.h
diff -u src/sys/netinet/in_pcb_hdr.h:1.13 src/sys/netinet/in_pcb_hdr.h:1.14
--- src/sys/netinet/in_pcb_hdr.h:1.13	Fri Jun  2 03:41:20 2017
+++ src/sys/netinet/in_pcb_hdr.h	Thu Aug 20 21:21:32 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: in_pcb_hdr.h,v 1.13 2017/06/02 03:41:20 ozaki-r Exp $	*/
+/*	$NetBSD: in_pcb_hdr.h,v 1.14 2020/08/20 21:21:32 riastradh Exp $	*/
 
 /*
  * Copyright (C) 2003 WIDE Project.
@@ -132,4 +132,7 @@ struct inpcbtable {
 #define	INP_BOUND		1
 #define	INP_CONNECTED		2
 
+typedef int (*pcb_overudp_cb_t)(struct mbuf **, int, struct socket *,
+    struct sockaddr *, void *);
+
 #endif /* !_NETINET_IN_PCB_HDR_H_ */

Index: src/sys/netinet/ip_encap.c
diff -u src/sys/netinet/ip_encap.c:1.72 src/sys/netinet/ip_encap.c:1.73
--- src/sys/netinet/ip_encap.c:1.72	Thu Jan 23 09:09:59 2020
+++ src/sys/netinet/ip_encap.c	Thu Aug 20 21:21:32 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: ip_encap.c,v 1.72 2020/01/23 09:09:59 knakahara Exp $	*/
+/*	$NetBSD: ip_encap.c,v 1.73 2020/08/20 21:21:32 riastradh Exp $	*/
 /*	$KAME: ip_encap.c,v 1.73 2001/10/02 08:30:58 itojun Exp $	*/
 
 /*
@@ -68,7 +68,7 @@
 #define USE_RADIX
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip_encap.c,v 1.72 2020/01/23 09:09:59 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip_encap.c,v 1.73 2020/08/20 21:21:32 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_mrouting.h"
@@ -126,7 +126,7 @@ static struct encaptab *encap6_lookup(st
 #endif
 static int encap_add(struct encaptab *);
 static int encap_remove(struct encaptab *);
-static int encap_afcheck(int, const struct sockaddr *, const struct sockaddr *);
+static void encap_afcheck(int, const struct sockaddr *, const struct sockaddr *);
 #ifdef USE_RADIX
 static struct radix_node_head *encap_rnh(int);
 static int mask_matchlen(const struct sockaddr *);
@@ -601,39 +601,16 @@ encap_remove(struct encaptab *ep)
 	return error;
 }
 
-static int
+static void
 encap_afcheck(int af, const struct sockaddr *sp, const struct sockaddr *dp)
 {
-	if (sp && dp) {
-		if (sp->sa_len != dp->sa_len)
-			return EINVAL;
-		if (af != sp->sa_family || af != dp->sa_family)
-			return EINVAL;
-	} else if (!sp && !dp)
-		;
-	else
-		return EINVAL;
 
-	switch (af) {
-	case AF_INET:
-		if (sp && sp->sa_len != sizeof(struct sockaddr_in))
-			return EINVAL;
-		if (dp && dp->sa_len != sizeof(struct sockaddr_in))
-			return EINVAL;
-		break;
-#ifdef INET6
-	case AF_INET6:
-		if (sp && sp->sa_len != sizeof(struct sockaddr_in6))
-			return EINVAL;
-		if (dp && dp->sa_len != sizeof(struct sockaddr_in6))
-			return EINVAL;
-		break;
-#endif
-	default:
-		return EAFNOSUPPORT;
-	}
+	KASSERT(sp != NULL && dp != NULL);
+	KASSERT(sp->sa_len == dp->sa_len);
+	KASSERT(af == sp->sa_family && af == dp->sa_family);
 
-	return 0;
+	socklen_t len = sockaddr_getsize_by_family(af);
+	KASSERT(len != 0 && len == sp->sa_len && len == dp->sa_len);
 }
 
 /*
@@ -660,10 +637,11 @@ encap_attach(int af, int proto,
 
 	s = splsoftnet();
 #endif
+
+	ASSERT_SLEEPABLE();
+
 	/* sanity check on args */
-	error = encap_afcheck(af, sp, dp);
-	if (error)
-		goto fail;
+	encap_afcheck(af, sp, dp);
 
 	/* check if anyone have already attached with exactly same config */
 	pss = pserialize_read_enter();
@@ -709,21 +687,9 @@ encap_attach(int af, int proto,
 	}
 
 	/* M_NETADDR ok? */
-	ep = kmem_zalloc(sizeof(*ep), KM_NOSLEEP);
-	if (ep == NULL) {
-		error = ENOBUFS;
-		goto fail;
-	}
-	ep->addrpack = kmem_zalloc(l, KM_NOSLEEP);
-	if (ep->addrpack == NULL) {
-		error = ENOBUFS;
-		goto gc;
-	}
-	ep->maskpack = kmem_zalloc(l, KM_NOSLEEP);
-	if (ep->maskpack == NULL) {
-		error = ENOBUFS;
-		goto gc;
-	}
+	ep = kmem_zalloc(sizeof(*ep), KM_SLEEP);
+	ep->addrpack = kmem_zalloc(l, KM_SLEEP);
+	ep->maskpack = kmem_zalloc(l, KM_SLEEP);
 
 	ep->af = af;
 	ep->proto = proto;
@@ -794,21 +760,18 @@ encap_attach_func(int af, int proto,
 
 	s = splsoftnet();
 #endif
-	/* sanity check on args */
-	if (!func) {
-		error = EINVAL;
-		goto fail;
-	}
 
-	error = encap_afcheck(af, NULL, NULL);
-	if (error)
-		goto fail;
+	ASSERT_SLEEPABLE();
 
-	ep = kmem_alloc(sizeof(*ep), KM_NOSLEEP);	/*XXX*/
-	if (ep == NULL) {
-		error = ENOBUFS;
-		goto fail;
-	}
+	/* sanity check on args */
+	KASSERT(func != NULL);
+	KASSERT(af == AF_INET
+#ifdef INET6
+	    || af == AF_INET6
+#endif
+	);
+
+	ep = kmem_alloc(sizeof(*ep), KM_SLEEP);
 	memset(ep, 0, sizeof(*ep));
 
 	ep->af = af;
@@ -830,7 +793,6 @@ encap_attach_func(int af, int proto,
 
 gc:
 	kmem_free(ep, sizeof(*ep));
-fail:
 #ifndef ENCAP_MPSAFE
 	splx(s);
 #endif

Index: src/sys/netinet/udp_usrreq.c
diff -u src/sys/netinet/udp_usrreq.c:1.258 src/sys/netinet/udp_usrreq.c:1.259
--- src/sys/netinet/udp_usrreq.c:1.258	Thu Dec 27 16:59:17 2018
+++ src/sys/netinet/udp_usrreq.c	Thu Aug 20 21:21:32 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: udp_usrreq.c,v 1.258 2018/12/27 16:59:17 maxv Exp $	*/
+/*	$NetBSD: udp_usrreq.c,v 1.259 2020/08/20 21:21:32 riastradh Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.258 2018/12/27 16:59:17 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.259 2020/08/20 21:21:32 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -597,6 +597,30 @@ udp4_realinput(struct sockaddr_in *src, 
 			}
 		}
 #endif
+		if (inp->inp_overudp_cb != NULL) {
+			int ret;
+			ret = inp->inp_overudp_cb(mp, off, inp->inp_socket,
+			    sintosa(src), inp->inp_overudp_arg);
+			switch (ret) {
+			case -1: /* Error, m was freed */
+				rcvcnt = -1;
+				goto bad;
+
+			case 1: /* Foo over UDP */
+				KASSERT(*mp == NULL);
+				rcvcnt++;
+				goto bad;
+
+			case 0: /* plain UDP */
+			default: /* Unexpected */
+				/*
+				 * Normal UDP processing will take place,
+				 * m may have changed.
+				 */
+				m = *mp;
+				break;
+			}
+		}
 
 		/*
 		 * Check the minimum TTL for socket.
@@ -1048,7 +1072,7 @@ udp_recvoob(struct socket *so, struct mb
 	return EOPNOTSUPP;
 }
 
-static int
+int
 udp_send(struct socket *so, struct mbuf *m, struct sockaddr *nam,
     struct mbuf *control, struct lwp *l)
 {

Index: src/sys/netinet/udp_var.h
diff -u src/sys/netinet/udp_var.h:1.45 src/sys/netinet/udp_var.h:1.46
--- src/sys/netinet/udp_var.h:1.45	Fri Sep 14 05:09:51 2018
+++ src/sys/netinet/udp_var.h	Thu Aug 20 21:21:32 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: udp_var.h,v 1.45 2018/09/14 05:09:51 maxv Exp $	*/
+/*	$NetBSD: udp_var.h,v 1.46 2020/08/20 21:21:32 riastradh Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -87,6 +87,8 @@ void udp_init(void);
 void udp_init_common(void);
 void udp_input(struct mbuf *, int, int);
 int udp_output(struct mbuf *, struct inpcb *, struct mbuf *, struct lwp *);
+int udp_send(struct socket *, struct mbuf *, struct sockaddr *,
+    struct mbuf *, struct lwp *);
 int udp_input_checksum(int af, struct mbuf *, const struct udphdr *, int, int);
 void udp_statinc(u_int);
 #endif /* _KERNEL */

Index: src/sys/netinet6/in6_pcb.h
diff -u src/sys/netinet6/in6_pcb.h:1.50 src/sys/netinet6/in6_pcb.h:1.51
--- src/sys/netinet6/in6_pcb.h:1.50	Thu Nov 22 04:48:34 2018
+++ src/sys/netinet6/in6_pcb.h	Thu Aug 20 21:21:32 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: in6_pcb.h,v 1.50 2018/11/22 04:48:34 knakahara Exp $	*/
+/*	$NetBSD: in6_pcb.h,v 1.51 2020/08/20 21:21:32 riastradh Exp $	*/
 /*	$KAME: in6_pcb.h,v 1.45 2001/02/09 05:59:46 itojun Exp $	*/
 
 /*
@@ -102,6 +102,8 @@ struct	in6pcb {
 	int	in6p_cksum;		/* IPV6_CHECKSUM setsockopt */
 	bool    in6p_bindportonsend;
 	struct ip_moptions *in6p_v4moptions;/* IP4 multicast options */
+	pcb_overudp_cb_t in6p_overudp_cb;
+	void      *in6p_overudp_arg;
 };
 
 #define in6p_faddr	in6p_ip6.ip6_dst
@@ -192,6 +194,14 @@ extern struct in6pcb *in6_pcblookup_conn
 					    struct vestigial_inpcb *);
 extern struct in6pcb *in6_pcblookup_bind(struct inpcbtable *,
 	const struct in6_addr *, u_int, int);
+
+static inline void
+in6_pcb_register_overudp_cb(struct in6pcb *in6p, pcb_overudp_cb_t cb, void *arg)
+{
+
+	in6p->in6p_overudp_cb = cb;
+	in6p->in6p_overudp_arg = arg;
+}
 #endif /* _KERNEL */
 
 #endif /* !_NETINET6_IN6_PCB_H_ */

Index: src/sys/netinet6/udp6_usrreq.c
diff -u src/sys/netinet6/udp6_usrreq.c:1.147 src/sys/netinet6/udp6_usrreq.c:1.148
--- src/sys/netinet6/udp6_usrreq.c:1.147	Mon Feb 25 07:31:32 2019
+++ src/sys/netinet6/udp6_usrreq.c	Thu Aug 20 21:21:32 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: udp6_usrreq.c,v 1.147 2019/02/25 07:31:32 maxv Exp $ */
+/* $NetBSD: udp6_usrreq.c,v 1.148 2020/08/20 21:21:32 riastradh Exp $ */
 /* $KAME: udp6_usrreq.c,v 1.86 2001/05/27 17:33:00 itojun Exp $ */
 /* $KAME: udp6_output.c,v 1.43 2001/10/15 09:19:52 itojun Exp $ */
 
@@ -63,7 +63,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: udp6_usrreq.c,v 1.147 2019/02/25 07:31:32 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udp6_usrreq.c,v 1.148 2020/08/20 21:21:32 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -547,6 +547,30 @@ udp6_realinput(int af, struct sockaddr_i
 		}
 #endif
 
+		if (in6p->in6p_overudp_cb != NULL) {
+			int ret;
+			ret = in6p->in6p_overudp_cb(mp, off, in6p->in6p_socket,
+			    sin6tosa(src), in6p->in6p_overudp_arg);
+			switch (ret) {
+			case -1: /* Error, m was freed */
+				rcvcnt = -1;
+				goto bad;
+
+			case 1: /* Foo over UDP */
+				KASSERT(*mp == NULL);
+				rcvcnt++;
+				goto bad;
+
+			case 0: /* plain UDP */
+			default: /* Unexpected */
+				/*
+				 * Normal UDP processing will take place,
+				 * m may have changed.
+				 */
+				break;
+			}
+		}
+
 		udp6_sendup(m, off, sin6tosa(src), in6p->in6p_socket);
 		rcvcnt++;
 	}

Index: src/sys/rump/kern/lib/libcrypto/Makefile
diff -u src/sys/rump/kern/lib/libcrypto/Makefile:1.13 src/sys/rump/kern/lib/libcrypto/Makefile:1.14
--- src/sys/rump/kern/lib/libcrypto/Makefile:1.13	Tue Jul 28 20:15:07 2020
+++ src/sys/rump/kern/lib/libcrypto/Makefile	Thu Aug 20 21:21:32 2020
@@ -1,13 +1,29 @@
-#	$NetBSD: Makefile,v 1.13 2020/07/28 20:15:07 riastradh Exp $
+#	$NetBSD: Makefile,v 1.14 2020/08/20 21:21:32 riastradh Exp $
 #
 
+SODIUM_IMPORTDIR=${.CURDIR}/../../../../external/isc/libsodium
+SODIUM_DIR=${.CURDIR}/../../../../external/isc/libsodium/dist/src/libsodium
+
 .PATH:	${.CURDIR}/../../../../crypto/adiantum				\
 	${.CURDIR}/../../../../crypto/aes				\
 	${.CURDIR}/../../../../crypto/blowfish				\
 	${.CURDIR}/../../../../crypto/camellia				\
 	${.CURDIR}/../../../../crypto/cast128				\
 	${.CURDIR}/../../../../crypto/des				\
-	${.CURDIR}/../../../../crypto/skipjack
+	${.CURDIR}/../../../../crypto/skipjack				\
+	${.CURDIR}/../../../../external/cc0/libb2/dist/src		\
+	${SODIUM_DIR}/crypto_scalarmult/curve25519/ref10		\
+	${SODIUM_DIR}/crypto_scalarmult/curve25519			\
+	${SODIUM_DIR}/crypto_scalarmult					\
+	${SODIUM_DIR}/crypto_onetimeauth/poly1305/donna			\
+	${SODIUM_DIR}/crypto_onetimeauth/poly1305			\
+	${SODIUM_DIR}/crypto_onetimeauth				\
+	${SODIUM_DIR}/crypto_stream/chacha20/ref			\
+	${SODIUM_DIR}/crypto_stream/chacha20				\
+	${SODIUM_DIR}/crypto_aead/xchacha20poly1305/sodium		\
+	${SODIUM_DIR}/crypto_aead/chacha20poly1305/sodium		\
+	${SODIUM_DIR}/crypto_core/hchacha20				\
+	${SODIUM_DIR}/crypto_core/ed25519/ref10
 
 LIB=	rumpkern_crypto
 COMMENT=Cryptographic routines
@@ -41,5 +57,35 @@ SRCS+=	des_ecb.c des_setkey.c des_enc.c 
 # skipjack
 SRCS+=	skipjack.c
 
+# BLAKE2
+SRCS+=	blake2s-ref.c
+CPPFLAGS.blake2s-ref.c+= -I${.CURDIR}/../../../../external/cc0/libb2/include \
+    -Wno-cast-qual -DSUFFIX=
+
+# Various cryptography functions
+SODIUM_CPPFLAGS=
+SODIUM_CPPFLAGS+=	-I${SODIUM_IMPORTDIR}/include
+SODIUM_CPPFLAGS+=	-I${SODIUM_IMPORTDIR}/dist/src/libsodium/include/sodium
+SODIUM_CPPFLAGS+=	-Wno-unused-function -Wno-unused-variable -DHAVE_TI_MODE
+
+CPPFLAGS.x25519_ref10.c+=		${SODIUM_CPPFLAGS}
+CPPFLAGS.scalarmult_curve25519.c+=	${SODIUM_CPPFLAGS}
+CPPFLAGS.crypto_scalarmult.c+=		${SODIUM_CPPFLAGS}
+CPPFLAGS.poly1305_donna.c+=		${SODIUM_CPPFLAGS}
+CPPFLAGS.onetimeauth_poly1305.c+=	${SODIUM_CPPFLAGS}
+CPPFLAGS.crypto_onetimeauth.c+=		${SODIUM_CPPFLAGS}
+CPPFLAGS.chacha20_ref.c+=		${SODIUM_CPPFLAGS}
+CPPFLAGS.stream_chacha20.c+=		${SODIUM_CPPFLAGS}
+CPPFLAGS.aead_xchacha20poly1305.c+=	${SODIUM_CPPFLAGS}
+CPPFLAGS.aead_chacha20poly1305.c+=	${SODIUM_CPPFLAGS}
+CPPFLAGS.core_hchacha20.c+=		${SODIUM_CPPFLAGS}
+CPPFLAGS.ed25519_ref10.c+=		${SODIUM_CPPFLAGS}
+
+SRCS+=	x25519_ref10.c scalarmult_curve25519.c crypto_scalarmult.c
+SRCS+=	poly1305_donna.c onetimeauth_poly1305.c
+SRCS+=	crypto_onetimeauth.c chacha20_ref.c stream_chacha20.c
+SRCS+=	aead_xchacha20poly1305.c aead_chacha20poly1305.c
+SRCS+=	core_hchacha20.c ed25519_ref10.c
+
 .include <bsd.lib.mk>
 .include <bsd.klinks.mk>

Index: src/sys/rump/net/Makefile.rumpnetcomp
diff -u src/sys/rump/net/Makefile.rumpnetcomp:1.20 src/sys/rump/net/Makefile.rumpnetcomp:1.21
--- src/sys/rump/net/Makefile.rumpnetcomp:1.20	Wed Jan 10 11:02:42 2018
+++ src/sys/rump/net/Makefile.rumpnetcomp	Thu Aug 20 21:21:32 2020
@@ -1,10 +1,11 @@
-#	$NetBSD: Makefile.rumpnetcomp,v 1.20 2018/01/10 11:02:42 knakahara Exp $
+#	$NetBSD: Makefile.rumpnetcomp,v 1.21 2020/08/20 21:21:32 riastradh Exp $
 #
 
 .include <bsd.own.mk>
 
 RUMPNETCOMP=	agr bridge net net80211 netbt netcan netinet netinet6 netipsec
 RUMPNETCOMP+=	gif ipsec netmpls npf l2tp local pppoe shmif tap tun vlan
+RUMPNETCOMP+=	wireguard
 
 .if ${MKSLJIT} != "no" || make(rumpdescribe)
 RUMPNETCOMP+=	bpfjit

Index: src/tests/net/Makefile
diff -u src/tests/net/Makefile:1.34 src/tests/net/Makefile:1.35
--- src/tests/net/Makefile:1.34	Wed Jan 10 11:06:06 2018
+++ src/tests/net/Makefile	Thu Aug 20 21:21:32 2020
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.34 2018/01/10 11:06:06 knakahara Exp $
+# $NetBSD: Makefile,v 1.35 2020/08/20 21:21:32 riastradh Exp $
 
 .include <bsd.own.mk>
 
@@ -8,7 +8,7 @@ TESTS_SUBDIRS=		fdpass in_cksum net sys
 .if (${MKRUMP} != "no") && !defined(BSD_MK_COMPAT_FILE)
 TESTS_SUBDIRS+=		arp bpf bpfilter can carp icmp if if_bridge if_gif
 TESTS_SUBDIRS+=		if_ipsec if_l2tp if_loop if_pppoe if_tap if_tun ipsec
-TESTS_SUBDIRS+=		mcast mpls ndp npf route if_vlan
+TESTS_SUBDIRS+=		mcast mpls ndp npf route if_vlan wireguard
 .if (${MKSLJIT} != "no")
 TESTS_SUBDIRS+=		bpfjit
 .endif

Index: src/usr.sbin/Makefile
diff -u src/usr.sbin/Makefile:1.283 src/usr.sbin/Makefile:1.284
--- src/usr.sbin/Makefile:1.283	Sun Jan 19 06:55:24 2020
+++ src/usr.sbin/Makefile	Thu Aug 20 21:21:32 2020
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.283 2020/01/19 06:55:24 thorpej Exp $
+#	$NetBSD: Makefile,v 1.284 2020/08/20 21:21:32 riastradh Exp $
 #	from: @(#)Makefile	5.20 (Berkeley) 6/12/93
 
 .include <bsd.own.mk>
@@ -30,8 +30,8 @@ SUBDIR=	ac accton acpitools altq apm apm
 	tadpolectl tcpdchk tcpdmatch tcpdrop timed tpctl tprof traceroute trpt \
 	unlink usbdevs user \
 	videomode vipw veriexecgen vnconfig \
-	wakeonlan wiconfig wlanctl wsconscfg wsfontload wsmoused wsmuxctl \
-	zdump zic
+	wakeonlan wg-keygen wgconfig wiconfig wlanctl wsconscfg wsfontload wsmoused \
+	wsmuxctl zdump zic
 
 .if ${MKMAKEMANDB} != "no"
 SUBDIR+= makemandb

Reply via email to