Module Name: src
Committed By: christos
Date: Thu Jul 6 17:08:57 UTC 2017
Modified Files:
src/sys/kern: uipc_socket2.c
src/sys/netinet: ip_input.c raw_ip.c udp_usrreq.c
src/sys/netinet6: ip6_input.c udp6_usrreq.c
src/sys/sys: socketvar.h
Log Message:
Merge the two copies SO_TIMESTAMP/SO_OTIMESTAMP processing to a single
function, and add a SOOPT_TIMESTAMP define reducing compat pollution from
5 places to 1.
To generate a diff of this commit:
cvs rdiff -u -r1.124 -r1.125 src/sys/kern/uipc_socket2.c
cvs rdiff -u -r1.355 -r1.356 src/sys/netinet/ip_input.c
cvs rdiff -u -r1.164 -r1.165 src/sys/netinet/raw_ip.c
cvs rdiff -u -r1.233 -r1.234 src/sys/netinet/udp_usrreq.c
cvs rdiff -u -r1.178 -r1.179 src/sys/netinet6/ip6_input.c
cvs rdiff -u -r1.129 -r1.130 src/sys/netinet6/udp6_usrreq.c
cvs rdiff -u -r1.144 -r1.145 src/sys/sys/socketvar.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/kern/uipc_socket2.c
diff -u src/sys/kern/uipc_socket2.c:1.124 src/sys/kern/uipc_socket2.c:1.125
--- src/sys/kern/uipc_socket2.c:1.124 Sun Oct 2 15:26:46 2016
+++ src/sys/kern/uipc_socket2.c Thu Jul 6 13:08:57 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: uipc_socket2.c,v 1.124 2016/10/02 19:26:46 christos Exp $ */
+/* $NetBSD: uipc_socket2.c,v 1.125 2017/07/06 17:08:57 christos Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -58,11 +58,12 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_socket2.c,v 1.124 2016/10/02 19:26:46 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_socket2.c,v 1.125 2017/07/06 17:08:57 christos Exp $");
#ifdef _KERNEL_OPT
#include "opt_mbuftrace.h"
#include "opt_sb_max.h"
+#include "opt_compat_netbsd.h"
#endif
#include <sys/param.h>
@@ -1527,3 +1528,35 @@ sowait(struct socket *so, bool catch_p,
solockretry(so, lock);
return error;
}
+
+#ifdef COMPAT_50
+#include <compat/sys/time.h>
+#include <compat/sys/socket.h>
+#endif
+
+struct mbuf **
+sbsavetimestamp(int opt, struct mbuf *m, struct mbuf **mp)
+{
+ struct timeval tv;
+ microtime(&tv);
+
+#ifdef SO_OTIMESTAMP
+ if (opt & SO_OTIMESTAMP) {
+ struct timeval50 tv50;
+
+ timeval_to_timeval50(&tv, &tv50);
+ *mp = sbcreatecontrol(&tv50, sizeof(tv50),
+ SCM_OTIMESTAMP, SOL_SOCKET);
+ if (*mp)
+ mp = &(*mp)->m_next;
+ } else
+#endif
+
+ if (opt & SO_TIMESTAMP) {
+ *mp = sbcreatecontrol(&tv, sizeof(tv),
+ SCM_TIMESTAMP, SOL_SOCKET);
+ if (*mp)
+ mp = &(*mp)->m_next;
+ }
+ return mp;
+}
Index: src/sys/netinet/ip_input.c
diff -u src/sys/netinet/ip_input.c:1.355 src/sys/netinet/ip_input.c:1.356
--- src/sys/netinet/ip_input.c:1.355 Wed May 31 22:45:14 2017
+++ src/sys/netinet/ip_input.c Thu Jul 6 13:08:57 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ip_input.c,v 1.355 2017/06/01 02:45:14 chs Exp $ */
+/* $NetBSD: ip_input.c,v 1.356 2017/07/06 17:08:57 christos Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -91,11 +91,10 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip_input.c,v 1.355 2017/06/01 02:45:14 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip_input.c,v 1.356 2017/07/06 17:08:57 christos Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
-#include "opt_compat_netbsd.h"
#include "opt_gateway.h"
#include "opt_ipsec.h"
#include "opt_mrouting.h"
@@ -174,11 +173,6 @@ __KERNEL_RCSID(0, "$NetBSD: ip_input.c,v
#define IPMTUDISCTIMEOUT (10 * 60) /* as per RFC 1191 */
#endif
-#ifdef COMPAT_50
-#include <compat/sys/time.h>
-#include <compat/sys/socket.h>
-#endif
-
/*
* Note: DIRECTED_BROADCAST is handled this way so that previous
* configuration using this option will Just Work.
@@ -1529,27 +1523,9 @@ ip_savecontrol(struct inpcb *inp, struct
if (__predict_false(ifp == NULL))
return; /* XXX should report error? */
- if (so->so_options & SO_TIMESTAMP
-#ifdef SO_OTIMESTAMP
- || so->so_options & SO_OTIMESTAMP
-#endif
- ) {
- struct timeval tv;
-
- microtime(&tv);
-#ifdef SO_OTIMESTAMP
- if (so->so_options & SO_OTIMESTAMP) {
- struct timeval50 tv50;
- timeval_to_timeval50(&tv, &tv50);
- *mp = sbcreatecontrol((void *) &tv50, sizeof(tv50),
- SCM_OTIMESTAMP, SOL_SOCKET);
- } else
-#endif
- *mp = sbcreatecontrol((void *) &tv, sizeof(tv),
- SCM_TIMESTAMP, SOL_SOCKET);
- if (*mp)
- mp = &(*mp)->m_next;
- }
+ if (SOOPT_TIMESTAMP(so->so_options))
+ mp = sbsavetimestamp(so->so_options, m, mp);
+
if (inpflags & INP_RECVDSTADDR) {
*mp = sbcreatecontrol((void *) &ip->ip_dst,
sizeof(struct in_addr), IP_RECVDSTADDR, IPPROTO_IP);
Index: src/sys/netinet/raw_ip.c
diff -u src/sys/netinet/raw_ip.c:1.164 src/sys/netinet/raw_ip.c:1.165
--- src/sys/netinet/raw_ip.c:1.164 Thu Apr 20 04:46:07 2017
+++ src/sys/netinet/raw_ip.c Thu Jul 6 13:08:57 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: raw_ip.c,v 1.164 2017/04/20 08:46:07 ozaki-r Exp $ */
+/* $NetBSD: raw_ip.c,v 1.165 2017/07/06 17:08:57 christos Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -65,11 +65,10 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: raw_ip.c,v 1.164 2017/04/20 08:46:07 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: raw_ip.c,v 1.165 2017/07/06 17:08:57 christos Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
-#include "opt_compat_netbsd.h"
#include "opt_ipsec.h"
#include "opt_mrouting.h"
#include "opt_net_mpsafe.h"
@@ -105,10 +104,6 @@ __KERNEL_RCSID(0, "$NetBSD: raw_ip.c,v 1
#include <netipsec/ipsec_private.h>
#endif /* IPSEC */
-#ifdef COMPAT_50
-#include <compat/sys/socket.h>
-#endif
-
struct inpcbtable rawcbtable;
int rip_pcbnotify(struct inpcbtable *, struct in_addr,
@@ -149,10 +144,7 @@ rip_sbappendaddr(struct inpcb *last, str
if (last->inp_flags & INP_NOHEADER)
m_adj(n, hlen);
if (last->inp_flags & INP_CONTROLOPTS
-#ifdef SO_OTIMESTAMP
- || last->inp_socket->so_options & SO_OTIMESTAMP
-#endif
- || last->inp_socket->so_options & SO_TIMESTAMP)
+ || SOOPT_TIMESTAMP(last->inp_socket->so_options))
ip_savecontrol(last, &opts, ip, n);
if (sbappendaddr(&last->inp_socket->so_rcv, sa, n, opts) == 0) {
/* should notify about lost packet */
Index: src/sys/netinet/udp_usrreq.c
diff -u src/sys/netinet/udp_usrreq.c:1.233 src/sys/netinet/udp_usrreq.c:1.234
--- src/sys/netinet/udp_usrreq.c:1.233 Thu Apr 20 04:46:07 2017
+++ src/sys/netinet/udp_usrreq.c Thu Jul 6 13:08:57 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: udp_usrreq.c,v 1.233 2017/04/20 08:46:07 ozaki-r Exp $ */
+/* $NetBSD: udp_usrreq.c,v 1.234 2017/07/06 17:08:57 christos Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -66,11 +66,10 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.233 2017/04/20 08:46:07 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c,v 1.234 2017/07/06 17:08:57 christos Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
-#include "opt_compat_netbsd.h"
#include "opt_ipsec.h"
#include "opt_inet_csum.h"
#include "opt_ipkdb.h"
@@ -127,10 +126,6 @@ __KERNEL_RCSID(0, "$NetBSD: udp_usrreq.c
#endif
#endif /* IPSEC */
-#ifdef COMPAT_50
-#include <compat/sys/socket.h>
-#endif
-
#ifdef IPKDB
#include <ipkdb/ipkdb.h>
#endif
@@ -488,10 +483,7 @@ udp4_sendup(struct mbuf *m, int off /* o
if ((n = m_copypacket(m, M_DONTWAIT)) != NULL) {
if (inp->inp_flags & INP_CONTROLOPTS
-#ifdef SO_OTIMESTAMP
- || so->so_options & SO_OTIMESTAMP
-#endif
- || so->so_options & SO_TIMESTAMP) {
+ || SOOPT_TIMESTAMP(so->so_options)) {
struct ip *ip = mtod(n, struct ip *);
ip_savecontrol(inp, &opts, ip, n);
}
Index: src/sys/netinet6/ip6_input.c
diff -u src/sys/netinet6/ip6_input.c:1.178 src/sys/netinet6/ip6_input.c:1.179
--- src/sys/netinet6/ip6_input.c:1.178 Wed May 31 22:45:14 2017
+++ src/sys/netinet6/ip6_input.c Thu Jul 6 13:08:57 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ip6_input.c,v 1.178 2017/06/01 02:45:14 chs Exp $ */
+/* $NetBSD: ip6_input.c,v 1.179 2017/07/06 17:08:57 christos Exp $ */
/* $KAME: ip6_input.c,v 1.188 2001/03/29 05:34:31 itojun Exp $ */
/*
@@ -62,14 +62,13 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip6_input.c,v 1.178 2017/06/01 02:45:14 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip6_input.c,v 1.179 2017/07/06 17:08:57 christos Exp $");
#ifdef _KERNEL_OPT
#include "opt_gateway.h"
#include "opt_inet.h"
#include "opt_inet6.h"
#include "opt_ipsec.h"
-#include "opt_compat_netbsd.h"
#include "opt_net_mpsafe.h"
#endif
@@ -120,11 +119,6 @@ __KERNEL_RCSID(0, "$NetBSD: ip6_input.c,
#include <netipsec/key.h>
#endif /* IPSEC */
-#ifdef COMPAT_50
-#include <compat/sys/time.h>
-#include <compat/sys/socket.h>
-#endif
-
#include <netinet6/ip6protosw.h>
#include "faith.h"
@@ -1085,33 +1079,15 @@ void
ip6_savecontrol(struct in6pcb *in6p, struct mbuf **mp,
struct ip6_hdr *ip6, struct mbuf *m)
{
+ struct socket *so = in6p->in6p_socket;
#ifdef RFC2292
#define IS2292(x, y) ((in6p->in6p_flags & IN6P_RFC2292) ? (x) : (y))
#else
#define IS2292(x, y) (y)
#endif
- if (in6p->in6p_socket->so_options & SO_TIMESTAMP
-#ifdef SO_OTIMESTAMP
- || in6p->in6p_socket->so_options & SO_OTIMESTAMP
-#endif
- ) {
- struct timeval tv;
-
- microtime(&tv);
-#ifdef SO_OTIMESTAMP
- if (in6p->in6p_socket->so_options & SO_OTIMESTAMP) {
- struct timeval50 tv50;
- timeval_to_timeval50(&tv, &tv50);
- *mp = sbcreatecontrol((void *) &tv50, sizeof(tv50),
- SCM_OTIMESTAMP, SOL_SOCKET);
- } else
-#endif
- *mp = sbcreatecontrol((void *) &tv, sizeof(tv),
- SCM_TIMESTAMP, SOL_SOCKET);
- if (*mp)
- mp = &(*mp)->m_next;
- }
+ if (SOOPT_TIMESTAMP(so->so_options))
+ mp = sbsavetimestamp(so->so_options, m, mp);
/* some OSes call this logic with IPv4 packet, for SO_TIMESTAMP */
if ((ip6->ip6_vfc & IPV6_VERSION_MASK) != IPV6_VERSION)
Index: src/sys/netinet6/udp6_usrreq.c
diff -u src/sys/netinet6/udp6_usrreq.c:1.129 src/sys/netinet6/udp6_usrreq.c:1.130
--- src/sys/netinet6/udp6_usrreq.c:1.129 Thu Apr 20 04:46:07 2017
+++ src/sys/netinet6/udp6_usrreq.c Thu Jul 6 13:08:57 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: udp6_usrreq.c,v 1.129 2017/04/20 08:46:07 ozaki-r Exp $ */
+/* $NetBSD: udp6_usrreq.c,v 1.130 2017/07/06 17:08:57 christos Exp $ */
/* $KAME: udp6_usrreq.c,v 1.86 2001/05/27 17:33:00 itojun Exp $ */
/*
@@ -62,7 +62,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: udp6_usrreq.c,v 1.129 2017/04/20 08:46:07 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udp6_usrreq.c,v 1.130 2017/07/06 17:08:57 christos Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -363,10 +363,7 @@ udp6_sendup(struct mbuf *m, int off /* o
if ((n = m_copypacket(m, M_DONTWAIT)) != NULL) {
if (in6p->in6p_flags & IN6P_CONTROLOPTS
-#ifdef SO_OTIMESTAMP
- || in6p->in6p_socket->so_options & SO_OTIMESTAMP
-#endif
- || in6p->in6p_socket->so_options & SO_TIMESTAMP) {
+ || SOOPT_TIMESTAMP(in6p->in6p_socket->so_options)) {
struct ip6_hdr *ip6 = mtod(n, struct ip6_hdr *);
ip6_savecontrol(in6p, &opts, ip6, n);
}
Index: src/sys/sys/socketvar.h
diff -u src/sys/sys/socketvar.h:1.144 src/sys/sys/socketvar.h:1.145
--- src/sys/sys/socketvar.h:1.144 Fri Feb 3 11:06:45 2017
+++ src/sys/sys/socketvar.h Thu Jul 6 13:08:57 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: socketvar.h,v 1.144 2017/02/03 16:06:45 christos Exp $ */
+/* $NetBSD: socketvar.h,v 1.145 2017/07/06 17:08:57 christos Exp $ */
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -251,6 +251,9 @@ struct sockaddr_big;
struct mbuf *getsombuf(struct socket *, int);
+/* 0x400 is SO_OTIMESTAMP */
+#define SOOPT_TIMESTAMP(o) ((o) & (SO_TIMESTAMP | 0x400))
+
/*
* File operations on sockets.
*/
@@ -277,6 +280,8 @@ struct mbuf *
sbcreatecontrol(void *, int, int, int);
struct mbuf *
sbcreatecontrol1(void **, int, int, int, int);
+struct mbuf **
+ sbsavetimestamp(int, struct mbuf *, struct mbuf **);
void sbdrop(struct sockbuf *, int);
void sbdroprecord(struct sockbuf *);
void sbflush(struct sockbuf *);