summaryrefslogtreecommitdiffstats
path: root/sys/nfsserver/nfs_srvsock.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/nfsserver/nfs_srvsock.c')
-rw-r--r--sys/nfsserver/nfs_srvsock.c62
1 files changed, 34 insertions, 28 deletions
diff --git a/sys/nfsserver/nfs_srvsock.c b/sys/nfsserver/nfs_srvsock.c
index 0ea7f69..4b41e67 100644
--- a/sys/nfsserver/nfs_srvsock.c
+++ b/sys/nfsserver/nfs_srvsock.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)nfs_socket.c 8.5 (Berkeley) 3/30/95
- * $Id: nfs_socket.c,v 1.25 1997/05/13 17:25:44 dfr Exp $
+ * $Id: nfs_socket.c,v 1.26 1997/06/03 17:22:46 dfr Exp $
*/
/*
@@ -138,7 +138,7 @@ static int nfs_msg __P((struct proc *,char *,char *));
static int nfs_rcvlock __P((struct nfsreq *));
static void nfs_rcvunlock __P((int *flagp));
static void nfs_realign __P((struct mbuf *m, int hsiz));
-static int nfs_receive __P((struct nfsreq *rep, struct mbuf **aname,
+static int nfs_receive __P((struct nfsreq *rep, struct sockaddr **aname,
struct mbuf **mp));
static int nfs_reconnect __P((struct nfsreq *rep));
#ifndef NFS_NOSERVER
@@ -195,7 +195,7 @@ nfs_connect(nmp, rep)
struct proc *p = &proc0; /* only used for socreate and sobind */
nmp->nm_so = (struct socket *)0;
- saddr = mtod(nmp->nm_nam, struct sockaddr *);
+ saddr = nmp->nm_nam;
error = socreate(saddr->sa_family, &nmp->nm_so, nmp->nm_sotype,
nmp->nm_soproto, p);
if (error)
@@ -207,17 +207,18 @@ nfs_connect(nmp, rep)
* Some servers require that the client port be a reserved port number.
*/
if (saddr->sa_family == AF_INET && (nmp->nm_flag & NFSMNT_RESVPORT)) {
- MGET(m, M_WAIT, MT_SONAME);
- sin = mtod(m, struct sockaddr_in *);
- sin->sin_len = m->m_len = sizeof (struct sockaddr_in);
+ struct sockaddr_in ssin;
+ bzero(&ssin, sizeof ssin);
+ sin = &ssin;
+ sin->sin_len = sizeof (struct sockaddr_in);
sin->sin_family = AF_INET;
sin->sin_addr.s_addr = INADDR_ANY;
tport = IPPORT_RESERVED - 1;
sin->sin_port = htons(tport);
- while ((error = sobind(so, m, p)) == EADDRINUSE &&
+ while ((error = sobind(so, (struct sockaddr *)sin, p))
+ == EADDRINUSE &&
--tport > IPPORT_RESERVED / 2)
sin->sin_port = htons(tport);
- m_freem(m);
if (error)
goto bad;
}
@@ -232,6 +233,7 @@ nfs_connect(nmp, rep)
goto bad;
}
} else {
+ /* XXX should not use mbuf */
error = soconnect(so, nmp->nm_nam, p);
if (error)
goto bad;
@@ -383,11 +385,11 @@ nfs_disconnect(nmp)
int
nfs_send(so, nam, top, rep)
register struct socket *so;
- struct mbuf *nam;
+ struct sockaddr *nam;
register struct mbuf *top;
struct nfsreq *rep;
{
- struct mbuf *sendnam;
+ struct sockaddr *sendnam;
int error, soflags, flags;
if (rep) {
@@ -405,7 +407,7 @@ nfs_send(so, nam, top, rep)
} else
soflags = so->so_proto->pr_flags;
if ((soflags & PR_CONNREQUIRED) || (so->so_state & SS_ISCONNECTED))
- sendnam = (struct mbuf *)0;
+ sendnam = (struct sockaddr *)0;
else
sendnam = nam;
if (so->so_type == SOCK_SEQPACKET)
@@ -414,10 +416,11 @@ nfs_send(so, nam, top, rep)
flags = 0;
error = so->so_proto->pr_usrreqs->pru_sosend(so, sendnam, 0, top, 0,
- flags);
+ flags, curproc /*XXX*/);
if (error) {
if (rep) {
- log(LOG_INFO, "nfs send error %d for server %s\n",error,
+ log(LOG_INFO, "nfs send error %d for server %s\n",
+ error,
rep->r_nmp->nm_mountp->mnt_stat.f_mntfromname);
/*
* Deal with errors for the client side.
@@ -451,7 +454,7 @@ nfs_send(so, nam, top, rep)
static int
nfs_receive(rep, aname, mp)
register struct nfsreq *rep;
- struct mbuf **aname;
+ struct sockaddr **aname;
struct mbuf **mp;
{
register struct socket *so;
@@ -460,7 +463,7 @@ nfs_receive(rep, aname, mp)
register struct mbuf *m;
struct mbuf *control;
u_long len;
- struct mbuf **getnam;
+ struct sockaddr **getnam;
int error, sotype, rcvflg;
struct proc *p = curproc; /* XXX */
@@ -468,7 +471,7 @@ nfs_receive(rep, aname, mp)
* Set up arguments for soreceive()
*/
*mp = (struct mbuf *)0;
- *aname = (struct mbuf *)0;
+ *aname = (struct sockaddr *)0;
sotype = rep->r_nmp->nm_sotype;
/*
@@ -533,7 +536,7 @@ tryagain:
do {
rcvflg = MSG_WAITALL;
error = so->so_proto->pr_usrreqs->pru_soreceive
- (so, (struct mbuf **)0, &auio,
+ (so, (struct sockaddr **)0, &auio,
(struct mbuf **)0, (struct mbuf **)0,
&rcvflg);
if (error == EWOULDBLOCK && rep) {
@@ -568,7 +571,7 @@ tryagain:
do {
rcvflg = MSG_WAITALL;
error = so->so_proto->pr_usrreqs->pru_soreceive
- (so, (struct mbuf **)0,
+ (so, (struct sockaddr **)0,
&auio, mp, (struct mbuf **)0, &rcvflg);
} while (error == EWOULDBLOCK || error == EINTR ||
error == ERESTART);
@@ -593,7 +596,7 @@ tryagain:
do {
rcvflg = 0;
error = so->so_proto->pr_usrreqs->pru_soreceive
- (so, (struct mbuf **)0,
+ (so, (struct sockaddr **)0,
&auio, mp, &control, &rcvflg);
if (control)
m_freem(control);
@@ -628,7 +631,7 @@ errout:
if ((so = rep->r_nmp->nm_so) == NULL)
return (EACCES);
if (so->so_state & SS_ISCONNECTED)
- getnam = (struct mbuf **)0;
+ getnam = (struct sockaddr **)0;
else
getnam = aname;
auio.uio_resid = len = 1000000;
@@ -671,7 +674,8 @@ nfs_reply(myrep)
register struct nfsreq *rep;
register struct nfsmount *nmp = myrep->r_nmp;
register long t1;
- struct mbuf *mrep, *nam, *md;
+ struct mbuf *mrep, *md;
+ struct sockaddr *nam;
u_long rxid, *tl;
caddr_t dpos, cp2;
int error;
@@ -715,7 +719,7 @@ nfs_reply(myrep)
return (error);
}
if (nam)
- m_freem(nam);
+ FREE(nam, M_SONAME);
/*
* Get the xid and check that it is an rpc reply
@@ -1356,7 +1360,7 @@ nfs_timer(arg)
(m = m_copym(rep->r_mreq, 0, M_COPYALL, M_DONTWAIT))){
if ((nmp->nm_flag & NFSMNT_NOCONN) == 0)
error = (*so->so_proto->pr_usrreqs->pru_send)
- (so, 0, m, (struct mbuf *)0,
+ (so, 0, m, (struct sockaddr *)0,
(struct mbuf *)0, p);
else
error = (*so->so_proto->pr_usrreqs->pru_send)
@@ -1642,7 +1646,8 @@ nfsrv_rcv(so, arg, waitflag)
{
register struct nfssvc_sock *slp = (struct nfssvc_sock *)arg;
register struct mbuf *m;
- struct mbuf *mp, *nam;
+ struct mbuf *mp;
+ struct sockaddr *nam;
struct uio auio;
int flags, error;
@@ -1717,7 +1722,7 @@ nfsrv_rcv(so, arg, waitflag)
M_NFSRVDESC, waitflag);
if (!rec) {
if (nam)
- m_freem(nam);
+ FREE(nam, M_SONAME);
m_freem(mp);
continue;
}
@@ -1864,7 +1869,7 @@ nfsrv_getstream(slp, waitflag)
m_freem(slp->ns_frag);
} else {
nfs_realign(slp->ns_frag, 10 * NFSX_UNSIGNED);
- rec->nr_address = (struct mbuf*)0;
+ rec->nr_address = (struct sockaddr *)0;
rec->nr_packet = slp->ns_frag;
STAILQ_INSERT_TAIL(&slp->ns_rec, rec, nr_link);
}
@@ -1883,7 +1888,8 @@ nfsrv_dorec(slp, nfsd, ndp)
struct nfsrv_descript **ndp;
{
struct nfsrv_rec *rec;
- register struct mbuf *m, *nam;
+ register struct mbuf *m;
+ struct sockaddr *nam;
register struct nfsrv_descript *nd;
int error;
@@ -1902,7 +1908,7 @@ nfsrv_dorec(slp, nfsd, ndp)
nd->nd_dpos = mtod(m, caddr_t);
error = nfs_getreq(nd, nfsd, TRUE);
if (error) {
- m_freem(nam);
+ FREE(nam, M_SONAME);
free((caddr_t)nd, M_NFSRVDESC);
return (error);
}
OpenPOWER on IntegriCloud