On Fri, 13 Dec 2002, Kelly Yancey wrote:

>   Actually, as a follow-up to my own question, I don't see how the
> splnet()/splx() calls in rtsock.c are necessary at all as all of the pru_*
> hooks are called at splnet().  Being that rtsock's pru_* hooks are called at
> splnet(), is there any reason not to just extern the various raw_* pru hooks
> and reference them directly from route_usrreqs?
>
>   Kelly

  For a better idea of what I am talking about, a diff against 4.7 is
attached.  I've confirmed that it compiles and will leave a machine running
with this patch up over the weekend.  Any comments would be appreciated,

  Kelly

--
Kelly Yancey -- kbyanc@{posi.net,FreeBSD.org}
FreeBSD, The Power To Serve: http://www.freebsd.org/
Index: raw_cb.h
===================================================================
RCS file: /home/cvs/acs/base/src/sys/net/raw_cb.h,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 raw_cb.h
--- raw_cb.h    22 Mar 2002 04:11:00 -0000      1.1.1.1
+++ raw_cb.h    14 Dec 2002 04:17:55 -0000
@@ -71,6 +71,19 @@ void  raw_input __P((struct mbuf *,
            struct sockproto *, struct sockaddr *, struct sockaddr *));
 
 extern struct pr_usrreqs raw_usrreqs;
+
+int     raw_uabort __P((struct socket *));
+int     raw_uattach __P((struct socket *, int, struct proc *));
+int     raw_ubind __P((struct socket *, struct sockaddr *, struct proc *));
+int     raw_uconnect __P((struct socket *, struct sockaddr *, struct proc *));
+int     raw_udetach __P((struct socket *));
+int     raw_udisconnect __P((struct socket *));
+int     raw_upeeraddr __P((struct socket *, struct sockaddr **));
+int     raw_usend __P((struct socket *, int, struct mbuf *, struct sockaddr *,
+                       struct mbuf *, struct proc *));
+int     raw_ushutdown __P((struct socket *));
+int     raw_usockaddr __P((struct socket *, struct sockaddr **));
+
 #endif
 
 #endif
Index: raw_usrreq.c
===================================================================
RCS file: /home/cvs/acs/base/src/sys/net/raw_usrreq.c,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 raw_usrreq.c
--- raw_usrreq.c        22 Mar 2002 04:11:00 -0000      1.1.1.1
+++ raw_usrreq.c        14 Dec 2002 04:17:55 -0000
@@ -135,7 +135,7 @@ raw_ctlinput(cmd, arg, dummy)
        /* INCOMPLETE */
 }
 
-static int
+int
 raw_uabort(struct socket *so)
 {
        struct rawcb *rp = sotorawcb(so);
@@ -150,7 +150,7 @@ raw_uabort(struct socket *so)
 
 /* pru_accept is EOPNOTSUPP */
 
-static int
+int
 raw_uattach(struct socket *so, int proto, struct proc *p)
 {
        struct rawcb *rp = sotorawcb(so);
@@ -163,13 +163,13 @@ raw_uattach(struct socket *so, int proto
        return raw_attach(so, proto);
 }
 
-static int
+int
 raw_ubind(struct socket *so, struct sockaddr *nam, struct proc *p)
 {
        return EINVAL;
 }
 
-static int
+int
 raw_uconnect(struct socket *so, struct sockaddr *nam, struct proc *p)
 {
        return EINVAL;
@@ -178,7 +178,7 @@ raw_uconnect(struct socket *so, struct s
 /* pru_connect2 is EOPNOTSUPP */
 /* pru_control is EOPNOTSUPP */
 
-static int
+int
 raw_udetach(struct socket *so)
 {
        struct rawcb *rp = sotorawcb(so);
@@ -190,7 +190,7 @@ raw_udetach(struct socket *so)
        return 0;
 }
 
-static int
+int
 raw_udisconnect(struct socket *so)
 {
        struct rawcb *rp = sotorawcb(so);
@@ -207,7 +207,7 @@ raw_udisconnect(struct socket *so)
 
 /* pru_listen is EOPNOTSUPP */
 
-static int
+int
 raw_upeeraddr(struct socket *so, struct sockaddr **nam)
 {
        struct rawcb *rp = sotorawcb(so);
@@ -224,7 +224,7 @@ raw_upeeraddr(struct socket *so, struct 
 /* pru_rcvd is EOPNOTSUPP */
 /* pru_rcvoob is EOPNOTSUPP */
 
-static int
+int
 raw_usend(struct socket *so, int flags, struct mbuf *m,
          struct sockaddr *nam, struct mbuf *control, struct proc *p)
 {
@@ -267,7 +267,7 @@ release:
 
 /* pru_sense is null */
 
-static int
+int
 raw_ushutdown(struct socket *so)
 {
        struct rawcb *rp = sotorawcb(so);
@@ -278,7 +278,7 @@ raw_ushutdown(struct socket *so)
        return 0;
 }
 
-static int
+int
 raw_usockaddr(struct socket *so, struct sockaddr **nam)
 {
        struct rawcb *rp = sotorawcb(so);
Index: rtsock.c
===================================================================
RCS file: /home/cvs/acs/base/src/sys/net/rtsock.c,v
retrieving revision 1.1.1.2
diff -u -p -r1.1.1.2 rtsock.c
--- rtsock.c    23 Aug 2002 04:10:27 -0000      1.1.1.2
+++ rtsock.c    14 Dec 2002 04:17:55 -0000
@@ -88,15 +88,6 @@ static void   rt_setmetrics __P((u_long, 
  * It really doesn't make any sense at all for this code to share much
  * with raw_usrreq.c, since its functionality is so restricted.  XXX
  */
-static int
-rts_abort(struct socket *so)
-{
-       int s, error;
-       s = splnet();
-       error = raw_usrreqs.pru_abort(so);
-       splx(s);
-       return error;
-}
 
 /* pru_accept is EOPNOTSUPP */
 
@@ -150,26 +141,6 @@ rts_attach(struct socket *so, int proto,
        return 0;
 }
 
-static int
-rts_bind(struct socket *so, struct sockaddr *nam, struct proc *p)
-{
-       int s, error;
-       s = splnet();
-       error = raw_usrreqs.pru_bind(so, nam, p); /* xxx just EINVAL */
-       splx(s);
-       return error;
-}
-
-static int
-rts_connect(struct socket *so, struct sockaddr *nam, struct proc *p)
-{
-       int s, error;
-       s = splnet();
-       error = raw_usrreqs.pru_connect(so, nam, p); /* XXX just EINVAL */
-       splx(s);
-       return error;
-}
-
 /* pru_connect2 is EOPNOTSUPP */
 /* pru_control is EOPNOTSUPP */
 
@@ -202,69 +173,16 @@ rts_detach(struct socket *so)
        return error;
 }
 
-static int
-rts_disconnect(struct socket *so)
-{
-       int s, error;
-       s = splnet();
-       error = raw_usrreqs.pru_disconnect(so);
-       splx(s);
-       return error;
-}
-
 /* pru_listen is EOPNOTSUPP */
-
-static int
-rts_peeraddr(struct socket *so, struct sockaddr **nam)
-{
-       int s, error;
-       s = splnet();
-       error = raw_usrreqs.pru_peeraddr(so, nam);
-       splx(s);
-       return error;
-}
-
 /* pru_rcvd is EOPNOTSUPP */
 /* pru_rcvoob is EOPNOTSUPP */
-
-static int
-rts_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *nam,
-        struct mbuf *control, struct proc *p)
-{
-       int s, error;
-       s = splnet();
-       error = raw_usrreqs.pru_send(so, flags, m, nam, control, p);
-       splx(s);
-       return error;
-}
-
 /* pru_sense is null */
 
-static int
-rts_shutdown(struct socket *so)
-{
-       int s, error;
-       s = splnet();
-       error = raw_usrreqs.pru_shutdown(so);
-       splx(s);
-       return error;
-}
-
-static int
-rts_sockaddr(struct socket *so, struct sockaddr **nam)
-{
-       int s, error;
-       s = splnet();
-       error = raw_usrreqs.pru_sockaddr(so, nam);
-       splx(s);
-       return error;
-}
-
 static struct pr_usrreqs route_usrreqs = {
-       rts_abort, pru_accept_notsupp, rts_attach, rts_bind, rts_connect,
-       pru_connect2_notsupp, pru_control_notsupp, rts_detach, rts_disconnect,
-       pru_listen_notsupp, rts_peeraddr, pru_rcvd_notsupp, pru_rcvoob_notsupp,
-       rts_send, pru_sense_null, rts_shutdown, rts_sockaddr,
+       raw_uabort, pru_accept_notsupp, rts_attach, raw_ubind, raw_uconnect,
+       pru_connect2_notsupp, pru_control_notsupp, rts_detach, raw_udisconnect,
+       pru_listen_notsupp, raw_upeeraddr, pru_rcvd_notsupp, pru_rcvoob_notsupp,
+       raw_usend, pru_sense_null, raw_ushutdown, raw_usockaddr,
        sosend, soreceive, sopoll
 };
 

Reply via email to