This inlines all the trivial functions in the various places. OK? diff --git sys/conf/files sys/conf/files index 03b4a0e24cc..2771b6f4446 100644 --- sys/conf/files +++ sys/conf/files @@ -788,7 +788,6 @@ file net/switchctl.c switch file net/switchofp.c switch file net/pipex.c pipex file net/radix.c pf | ipsec | pipex | nfsserver -file net/raw_cb.c file net/raw_usrreq.c file net/rtable.c file net/route.c diff --git sys/net/pfkeyv2.c sys/net/pfkeyv2.c index 9d0194c0570..fc836155a52 100644 --- sys/net/pfkeyv2.c +++ sys/net/pfkeyv2.c @@ -229,12 +229,17 @@ pfkeyv2_attach(struct socket *so, int proto) rp = &kp->rcb; so->so_pcb = rp; - error = raw_attach(so, proto); + error = soreserve(so, RAWSNDQ, RAWRCVQ); + if (error) { free(kp, M_PCB, sizeof(struct keycb)); return (error); } + rp->rcb_socket = so; + rp->rcb_proto.sp_family = so->so_proto->pr_domain->dom_family; + rp->rcb_proto.sp_protocol = proto; + so->so_options |= SO_USELOOPBACK; soisconnected(so); @@ -277,7 +282,9 @@ pfkeyv2_detach(struct socket *so) mtx_leave(&pfkeyv2_mtx); } - raw_do_detach(&kp->rcb); + so->so_pcb = 0; + sofree(so); + free((caddr_t)(&kp->rcb), M_PCB, 0); return (0); } diff --git sys/net/raw_cb.c sys/net/raw_cb.c deleted file mode 100644 index f2396c704dd..00000000000 --- sys/net/raw_cb.c +++ /dev/null @@ -1,106 +0,0 @@ -/* $OpenBSD: raw_cb.c,v 1.13 2017/11/02 14:01:18 florian Exp $ */ -/* $NetBSD: raw_cb.c,v 1.9 1996/02/13 22:00:39 christos Exp $ */ - -/* - * Copyright (c) 1980, 1986, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)raw_cb.c 8.1 (Berkeley) 6/10/93 - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/mbuf.h> -#include <sys/socket.h> -#include <sys/socketvar.h> -#include <sys/domain.h> -#include <sys/protosw.h> -#include <sys/errno.h> - -#include <net/raw_cb.h> -#include <netinet/in.h> - -/* - * Routines to manage the raw protocol control blocks. - */ - -u_long raw_sendspace = RAWSNDQ; -u_long raw_recvspace = RAWRCVQ; - -/* - * Allocate a control block and a nominal amount - * of buffer space for the socket. - */ -int -raw_attach(struct socket *so, int proto) -{ - struct rawcb *rp = sotorawcb(so); - int error; - - /* - * It is assumed that raw_attach is called - * after space has been allocated for the - * rawcb. - */ - if (rp == NULL) - return (ENOBUFS); - if ((error = soreserve(so, raw_sendspace, raw_recvspace)) != 0) - return (error); - rp->rcb_socket = so; - rp->rcb_proto.sp_family = so->so_proto->pr_domain->dom_family; - rp->rcb_proto.sp_protocol = proto; - return (0); -} - -int -raw_detach(struct socket *so) -{ - struct rawcb *rp = sotorawcb(so); - - soassertlocked(so); - - if (rp == NULL) - return (EINVAL); - - raw_do_detach(rp); - - return (0); -} - -/* - * Detach the raw connection block and discard - * socket resources. - */ -void -raw_do_detach(struct rawcb *rp) -{ - struct socket *so = rp->rcb_socket; - - so->so_pcb = 0; - sofree(so); - free((caddr_t)(rp), M_PCB, 0); -} diff --git sys/net/raw_cb.h sys/net/raw_cb.h index f284b56044f..dd15ca3d1f4 100644 --- sys/net/raw_cb.h +++ sys/net/raw_cb.h @@ -55,9 +55,6 @@ struct rawcb { #ifdef _KERNEL #define sotorawcb(so) ((struct rawcb *)(so)->so_pcb) -int raw_attach(struct socket *, int); -int raw_detach(struct socket *); -void raw_do_detach(struct rawcb *); void raw_init(void); int raw_usrreq(struct socket *, int, struct mbuf *, struct mbuf *, struct mbuf *, struct proc *); diff --git sys/net/rtsock.c sys/net/rtsock.c index c2adc8d26ce..03fccea1084 100644 --- sys/net/rtsock.c +++ sys/net/rtsock.c @@ -224,12 +224,16 @@ route_attach(struct socket *so, int proto) if (curproc == NULL) error = EACCES; - else - error = raw_attach(so, proto); + else + error = soreserve(so, RAWSNDQ, RAWRCVQ); if (error) { free(rop, M_PCB, sizeof(struct routecb)); return (error); } + rp->rcb_socket = so; + rp->rcb_proto.sp_family = so->so_proto->pr_domain->dom_family; + rp->rcb_proto.sp_protocol = proto; + rop->rtableid = curproc->p_p->ps_rtableid; switch (rp->rcb_proto.sp_protocol) { case AF_INET: @@ -259,6 +263,7 @@ int route_detach(struct socket *so) { struct routecb *rop; + struct rawcb *rp; int af; soassertlocked(so); @@ -267,6 +272,10 @@ route_detach(struct socket *so) if (rop == NULL) return (EINVAL); + rp = sotorawcb(so); + if (rp == NULL) + return (EINVAL); + timeout_del(&rop->timeout); af = rop->rcb.rcb_proto.sp_protocol; if (af == AF_INET) @@ -279,7 +288,12 @@ route_detach(struct socket *so) #endif route_cb.any_count--; LIST_REMOVE(rop, rcb_list); - return (raw_detach(so)); + + so->so_pcb = 0; + sofree(so); + free((caddr_t)(rp), M_PCB, 0); + + return (0); } int
-- I'm not entirely sure you are real.