Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys Pass inpcb/in6pcb instead of socket to ip_output/ip6_output



details:   https://anonhg.NetBSD.org/src/rev/339b706e274c
branches:  trunk
changeset: 822133:339b706e274c
user:      ozaki-r <ozaki-r%NetBSD.org@localhost>
date:      Fri Mar 03 07:13:06 2017 +0000

description:
Pass inpcb/in6pcb instead of socket to ip_output/ip6_output

- Passing a socket to Layer 3 is layer violation and even unnecessary
- The change makes codes of callers and IPsec a bit simple

diffstat:

 sys/netinet/dccp_usrreq.c  |   6 +++---
 sys/netinet/ip_output.c    |  15 ++++++---------
 sys/netinet/ip_var.h       |   4 ++--
 sys/netinet/raw_ip.c       |   6 +++---
 sys/netinet/sctp_output.c  |   8 ++++----
 sys/netinet/tcp_input.c    |  22 ++++++----------------
 sys/netinet/tcp_output.c   |   8 ++++----
 sys/netinet/tcp_subr.c     |  20 ++++++--------------
 sys/netinet/udp_usrreq.c   |   6 +++---
 sys/netinet6/ip6_output.c  |   8 ++++----
 sys/netinet6/ip6_var.h     |   8 +++-----
 sys/netinet6/raw_ip6.c     |   6 +++---
 sys/netinet6/udp6_output.c |   8 ++++----
 sys/netipsec/ipsec.c       |  16 ++++------------
 sys/netipsec/ipsec.h       |   4 ++--
 sys/netipsec/ipsec6.h      |   4 ++--
 16 files changed, 59 insertions(+), 90 deletions(-)

diffs (truncated from 567 to 300 lines):

diff -r bca6df2093e4 -r 339b706e274c sys/netinet/dccp_usrreq.c
--- a/sys/netinet/dccp_usrreq.c Fri Mar 03 07:11:49 2017 +0000
+++ b/sys/netinet/dccp_usrreq.c Fri Mar 03 07:13:06 2017 +0000
@@ -1,5 +1,5 @@
 /*     $KAME: dccp_usrreq.c,v 1.67 2005/11/03 16:05:04 nishida Exp $   */
-/*     $NetBSD: dccp_usrreq.c,v 1.12 2017/01/16 15:44:47 christos Exp $ */
+/*     $NetBSD: dccp_usrreq.c,v 1.13 2017/03/03 07:13:06 ozaki-r Exp $ */
 
 /*
  * Copyright (c) 2003 Joacim Häggmark, Magnus Erixzon, Nils-Erik Mattsson 
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dccp_usrreq.c,v 1.12 2017/01/16 15:44:47 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dccp_usrreq.c,v 1.13 2017/03/03 07:13:06 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -1620,7 +1620,7 @@
                DCCP_DEBUG((LOG_INFO, "Calling ip_output, mbuf->m_len = %u, mbuf->m_pkthdr.len = %u\n", m->m_len, m->m_pkthdr.len));
                error = ip_output(m, inp->inp_options, &inp->inp_route,
                    (inp->inp_socket->so_options & SO_DONTROUTE), 0, 
-                                 inp->inp_socket);
+                                 inp);
        }
 
        if (error) {
diff -r bca6df2093e4 -r 339b706e274c sys/netinet/ip_output.c
--- a/sys/netinet/ip_output.c   Fri Mar 03 07:11:49 2017 +0000
+++ b/sys/netinet/ip_output.c   Fri Mar 03 07:13:06 2017 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ip_output.c,v 1.274 2017/03/02 05:29:31 ozaki-r Exp $  */
+/*     $NetBSD: ip_output.c,v 1.275 2017/03/03 07:13:06 ozaki-r Exp $  */
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -91,7 +91,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip_output.c,v 1.274 2017/03/02 05:29:31 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip_output.c,v 1.275 2017/03/03 07:13:06 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -225,7 +225,7 @@
  */
 int
 ip_output(struct mbuf *m0, struct mbuf *opt, struct route *ro, int flags,
-    struct ip_moptions *imo, struct socket *so)
+    struct ip_moptions *imo, struct inpcb *inp)
 {
        struct rtentry *rt;
        struct ip *ip;
@@ -588,7 +588,7 @@
                bool ipsec_done = false;
 
                /* Perform IPsec processing, if any. */
-               error = ipsec4_output(m, so, flags, &sp, &mtu, &natt_frag,
+               error = ipsec4_output(m, inp, flags, &sp, &mtu, &natt_frag,
                    &ipsec_done);
                if (error || ipsec_done)
                        goto done;
@@ -713,10 +713,7 @@
         */
        if (ntohs(ip->ip_off) & IP_DF) {
                if (flags & IP_RETURNMTU) {
-                       struct inpcb *inp;
-
-                       KASSERT(so && solocked(so));
-                       inp = sotoinpcb(so);
+                       KASSERT(inp != NULL);
                        inp->inp_errormtu = mtu;
                }
                error = EMSGSIZE;
@@ -750,7 +747,7 @@
                if (natt_frag) {
                        error = ip_output(m, opt, ro,
                            flags | IP_RAWOUTPUT | IP_NOIPNEWID,
-                           imo, so);
+                           imo, inp);
                } else {
                        KASSERT((m->m_pkthdr.csum_flags &
                            (M_CSUM_UDPv4 | M_CSUM_TCPv4)) == 0);
diff -r bca6df2093e4 -r 339b706e274c sys/netinet/ip_var.h
--- a/sys/netinet/ip_var.h      Fri Mar 03 07:11:49 2017 +0000
+++ b/sys/netinet/ip_var.h      Fri Mar 03 07:13:06 2017 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ip_var.h,v 1.117 2017/02/16 08:12:44 knakahara Exp $   */
+/*     $NetBSD: ip_var.h,v 1.118 2017/03/03 07:13:06 ozaki-r Exp $     */
 
 /*
  * Copyright (c) 1982, 1986, 1993
@@ -213,7 +213,7 @@
 int     ip_optcopy(struct ip *, struct ip *);
 u_int   ip_optlen(struct inpcb *);
 int     ip_output(struct mbuf *, struct mbuf *, struct route *, int,
-           struct ip_moptions *, struct socket *);
+           struct ip_moptions *, struct inpcb *);
 int     ip_fragment(struct mbuf *, struct ifnet *, u_long);
 
 void    ip_reass_init(void);
diff -r bca6df2093e4 -r 339b706e274c sys/netinet/raw_ip.c
--- a/sys/netinet/raw_ip.c      Fri Mar 03 07:11:49 2017 +0000
+++ b/sys/netinet/raw_ip.c      Fri Mar 03 07:13:06 2017 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: raw_ip.c,v 1.162 2017/01/24 07:09:24 ozaki-r Exp $     */
+/*     $NetBSD: raw_ip.c,v 1.163 2017/03/03 07:13:06 ozaki-r Exp $     */
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: raw_ip.c,v 1.162 2017/01/24 07:09:24 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: raw_ip.c,v 1.163 2017/03/03 07:13:06 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -383,7 +383,7 @@
         * will be stored in inp_errormtu.
         */
        return ip_output(m, opts, &inp->inp_route, flags, inp->inp_moptions,
-            inp->inp_socket);
+            inp);
 }
 
 /*
diff -r bca6df2093e4 -r 339b706e274c sys/netinet/sctp_output.c
--- a/sys/netinet/sctp_output.c Fri Mar 03 07:11:49 2017 +0000
+++ b/sys/netinet/sctp_output.c Fri Mar 03 07:13:06 2017 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: sctp_output.c,v 1.9 2016/12/23 11:11:28 maya Exp $ */
+/*     $NetBSD: sctp_output.c,v 1.10 2017/03/03 07:13:06 ozaki-r Exp $ */
 /*     $KAME: sctp_output.c,v 1.48 2005/06/16 18:29:24 jinmei Exp $    */
 
 /*
@@ -30,7 +30,7 @@
  * SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sctp_output.c,v 1.9 2016/12/23 11:11:28 maya Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sctp_output.c,v 1.10 2017/03/03 07:13:06 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ipsec.h"
@@ -2251,7 +2251,7 @@
                }
                ret = ip_output(m, inp->ip_inp.inp.inp_options,
                                ro, o_flgs, inp->ip_inp.inp.inp_moptions,
-                                (struct socket *)inp->sctp_socket);
+                                &inp->ip_inp.inp);
                if ((rt) && (have_mtu) && (net) && (have_mtu > net->mtu)) {
                        rt->rt_ifp->if_mtu = have_mtu;
                }
@@ -2449,7 +2449,7 @@
                                 ro,
                                 o_flgs,
                                 ((struct in6pcb *)inp)->in6p_moptions,
-                                (struct socket *)inp->sctp_socket,
+                                (struct in6pcb *)inp,
                                 &ifp);
                if (net) {
                        /* for link local this must be done */
diff -r bca6df2093e4 -r 339b706e274c sys/netinet/tcp_input.c
--- a/sys/netinet/tcp_input.c   Fri Mar 03 07:11:49 2017 +0000
+++ b/sys/netinet/tcp_input.c   Fri Mar 03 07:13:06 2017 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: tcp_input.c,v 1.354 2017/02/07 02:38:08 ozaki-r Exp $  */
+/*     $NetBSD: tcp_input.c,v 1.355 2017/03/03 07:13:06 ozaki-r Exp $  */
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -148,7 +148,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tcp_input.c,v 1.354 2017/02/07 02:38:08 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tcp_input.c,v 1.355 2017/03/03 07:13:06 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -4535,7 +4535,6 @@
        struct tcpcb *tp = NULL;
        struct tcphdr *th;
        u_int hlen;
-       struct socket *so;
 #ifdef TCP_SIGNATURE
        struct secasvar *sav = NULL;
        u_int8_t *sigp = NULL;
@@ -4584,18 +4583,8 @@
 
        /* Fixup the mbuf. */
        m->m_data += max_linkhdr;
-       if (sc->sc_tp) {
+       if (sc->sc_tp)
                tp = sc->sc_tp;
-               if (tp->t_inpcb)
-                       so = tp->t_inpcb->inp_socket;
-#ifdef INET6
-               else if (tp->t_in6pcb)
-                       so = tp->t_in6pcb->in6p_socket;
-#endif
-               else
-                       so = NULL;
-       } else
-               so = NULL;
        m_reset_rcvif(m);
        memset(mtod(m, u_char *), 0, tlen);
 
@@ -4818,7 +4807,7 @@
        case AF_INET:
                error = ip_output(m, sc->sc_ipopts, ro,
                    (ip_mtudisc ? IP_MTUDISC : 0),
-                   NULL, so);
+                   NULL, tp ? tp->t_inpcb : NULL);
                break;
 #endif
 #ifdef INET6
@@ -4827,7 +4816,8 @@
                    (rt = rtcache_validate(ro)) != NULL ? rt->rt_ifp : NULL);
                rtcache_unref(rt, ro);
 
-               error = ip6_output(m, NULL /*XXX*/, ro, 0, NULL, so, NULL);
+               error = ip6_output(m, NULL /*XXX*/, ro, 0, NULL,
+                   tp ? tp->t_in6pcb : NULL, NULL);
                break;
 #endif
        default:
diff -r bca6df2093e4 -r 339b706e274c sys/netinet/tcp_output.c
--- a/sys/netinet/tcp_output.c  Fri Mar 03 07:11:49 2017 +0000
+++ b/sys/netinet/tcp_output.c  Fri Mar 03 07:13:06 2017 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: tcp_output.c,v 1.194 2017/01/04 15:09:37 martin Exp $  */
+/*     $NetBSD: tcp_output.c,v 1.195 2017/03/03 07:13:06 ozaki-r Exp $ */
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -135,7 +135,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tcp_output.c,v 1.194 2017/01/04 15:09:37 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tcp_output.c,v 1.195 2017/03/03 07:13:06 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -1680,7 +1680,7 @@
                        opts = NULL;
                error = ip_output(m, opts, ro,
                        (tp->t_mtudisc ? IP_MTUDISC : 0) |
-                       (so->so_options & SO_DONTROUTE), NULL, so);
+                       (so->so_options & SO_DONTROUTE), NULL, tp->t_inpcb);
                break;
            }
 #endif
@@ -1694,7 +1694,7 @@
                else
                        opts = NULL;
                error = ip6_output(m, opts, ro, so->so_options & SO_DONTROUTE,
-                       NULL, so, NULL);
+                       NULL, tp->t_in6pcb, NULL);
                break;
            }
 #endif
diff -r bca6df2093e4 -r 339b706e274c sys/netinet/tcp_subr.c
--- a/sys/netinet/tcp_subr.c    Fri Mar 03 07:11:49 2017 +0000
+++ b/sys/netinet/tcp_subr.c    Fri Mar 03 07:13:06 2017 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: tcp_subr.c,v 1.269 2017/01/02 01:18:42 christos Exp $  */
+/*     $NetBSD: tcp_subr.c,v 1.270 2017/03/03 07:13:06 ozaki-r Exp $   */
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -91,7 +91,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tcp_subr.c,v 1.269 2017/01/02 01:18:42 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tcp_subr.c,v 1.270 2017/03/03 07:13:06 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -649,7 +649,6 @@
 #endif
        int family;     /* family on packet, not inpcb/in6pcb! */
        struct tcphdr *th;
-       struct socket *so;
 
        if (tp != NULL && (flags & TH_RST) == 0) {
 #ifdef DIAGNOSTIC
@@ -892,15 +891,6 @@
 #endif
        }
 
-       if (tp && tp->t_inpcb)
-               so = tp->t_inpcb->inp_socket;
-#ifdef INET6



Home | Main Index | Thread Index | Old Index