*tl++ = txdr_unsigned(NQNFS_VER1);
*tl++ = txdr_unsigned(NQNFS_VER3);
nfsm_rpchead(cr, nqnfs, procid, auth_type, auth_len, auth_str, mrest,	mrest_len, mbp, xidp)	register struct ucred *cr;	int nqnfs;	int procid;	int auth_type;	int auth_len;	char *auth_str;	struct mbuf *mrest;	int mrest_len;	struct mbuf **mbp;	u_int32_t *xidp;{	register struct mbuf *mb;	register u_int32_t *tl;	register caddr_t bpos;	register int i;	struct mbuf *mreq, *mb2;	int siz, grpsiz, authsiz;	authsiz = nfsm_rndup(auth_len);	if (auth_type == RPCAUTH_NQNFS)		authsiz += 2 * NFSX_UNSIGNED;	MGETHDR(mb, M_WAIT, MT_DATA);	if ((authsiz + 10*NFSX_UNSIGNED) >= MINCLSIZE) {		MCLGET(mb, M_WAIT);	} else if ((authsiz + 10*NFSX_UNSIGNED) < MHLEN) {		MH_ALIGN(mb, authsiz + 10*NFSX_UNSIGNED);	} else {		MH_ALIGN(mb, 8*NFSX_UNSIGNED);	}	mb->m_len = 0;	mreq = mb;	bpos = mtod(mb, caddr_t);	/*	 * First the RPC header.	 */	nfsm_build(tl, u_int32_t *, 8*NFSX_UNSIGNED);	if (++nfs_xid == 0)		nfs_xid++;	*tl++ = *xidp = txdr_unsigned(nfs_xid);	*tl++ = rpc_call;	*tl++ = rpc_vers;	if (nqnfs) {		*tl++ = txdr_unsigned(NQNFS_PROG);		*tl++ = txdr_unsigned(NQNFS_VER1);	} else {		*tl++ = txdr_unsigned(NFS_PROG);		*tl++ = txdr_unsigned(NFS_VER2);	}	*tl++ = txdr_unsigned(procid);	/*	 * And then the authorization cred.	 */	*tl++ = txdr_unsigned(auth_type);	*tl = txdr_unsigned(authsiz);	switch (auth_type) {	case RPCAUTH_UNIX:		nfsm_build(tl, u_int32_t *, auth_len);		*tl++ = 0;		/* stamp ?? */		*tl++ = 0;		/* NULL hostname */		*tl++ = txdr_unsigned(cr->cr_uid);		*tl++ = txdr_unsigned(cr->cr_gid);		grpsiz = (auth_len >> 2) - 5;		*tl++ = txdr_unsigned(grpsiz);		for (i = 0; i < grpsiz; i++)			*tl++ = txdr_unsigned(cr->cr_groups[i]);		break;	case RPCAUTH_NQNFS:		nfsm_build(tl, u_int32_t *, 2*NFSX_UNSIGNED);		*tl++ = txdr_unsigned(cr->cr_uid);		*tl = txdr_unsigned(auth_len);		siz = auth_len;		while (siz > 0) {			if (M_TRAILINGSPACE(mb) == 0) {				MGET(mb2, M_WAIT, MT_DATA);				if (siz >= MINCLSIZE)					MCLGET(mb2, M_WAIT);				mb->m_next = mb2;				mb = mb2;				mb->m_len = 0;				bpos = mtod(mb, caddr_t);			}			i = min(siz, M_TRAILINGSPACE(mb));			bcopy(auth_str, bpos, i);			mb->m_len += i;			auth_str += i;			bpos += i;			siz -= i;		}		if ((siz = (nfsm_rndup(auth_len) - auth_len)) > 0) {			for (i = 0; i < siz; i++)				*bpos++ = '\0';			mb->m_len += siz;		}		break;	};	nfsm_build(tl, u_int32_t *, 2*NFSX_UNSIGNED);	*tl++ = txdr_unsigned(RPCAUTH_NULL);	*tl = 0;	mb->m_next = mrest;	mreq->m_pkthdr.len = authsiz + 10*NFSX_UNSIGNED + mrest_len;	mreq->m_pkthdr.rcvif = (struct ifnet *)0;	*mbp = mb;	return (mreq);}