summaryrefslogtreecommitdiffstats
path: root/sys/nfs/nfs_nqlease.c
diff options
context:
space:
mode:
authordillon <dillon@FreeBSD.org>1999-11-11 17:24:02 +0000
committerdillon <dillon@FreeBSD.org>1999-11-11 17:24:02 +0000
commitac372bbf0e733ba582ca3078e6ce33d10500e9ca (patch)
tree03922dd85debd3a28ae12a196cc3f78c9188e8d5 /sys/nfs/nfs_nqlease.c
parent3eeb2e13574fbbaa3802a1cca5100110bedf0630 (diff)
downloadFreeBSD-src-ac372bbf0e733ba582ca3078e6ce33d10500e9ca.zip
FreeBSD-src-ac372bbf0e733ba582ca3078e6ce33d10500e9ca.tar.gz
Remove special case socket sharing code in order to allow nfsd to
bind IP addresses to udp/cltp sockets separately. PR: kern/13049 Reviewed by: David Malone <dwmalone@maths.tcd.ie>, freebsd-current
Diffstat (limited to 'sys/nfs/nfs_nqlease.c')
-rw-r--r--sys/nfs/nfs_nqlease.c36
1 files changed, 24 insertions, 12 deletions
diff --git a/sys/nfs/nfs_nqlease.c b/sys/nfs/nfs_nqlease.c
index 32b5d39..3f78fb8 100644
--- a/sys/nfs/nfs_nqlease.c
+++ b/sys/nfs/nfs_nqlease.c
@@ -138,7 +138,6 @@ int nqnfs_piggy[NFS_NPROCS] = {
extern nfstype nfsv2_type[9];
extern nfstype nfsv3_type[9];
-extern struct nfssvc_sock *nfs_udpsock, *nfs_cltpsock;
extern int nfsd_waiting;
extern struct nfsstats nfsstats;
@@ -380,18 +379,24 @@ nqsrv_addhost(lph, slp, nam)
struct nfssvc_sock *slp;
struct sockaddr *nam;
{
- register struct sockaddr_in *saddr;
+ struct sockaddr_in *saddr;
+ struct socket *nsso;
- if (slp == NQLOCALSLP)
+ if (slp == NQLOCALSLP) {
lph->lph_flag |= (LC_VALID | LC_LOCAL);
- else if (slp == nfs_udpsock) {
+ return;
+ }
+ nsso = slp->ns_so;
+ if (nsso && nsso->so_proto->pr_protocol == IPPROTO_UDP) {
saddr = (struct sockaddr_in *)nam;
lph->lph_flag |= (LC_VALID | LC_UDP);
lph->lph_inetaddr = saddr->sin_addr.s_addr;
lph->lph_port = saddr->sin_port;
- } else if (slp == nfs_cltpsock) {
+#ifdef ISO
+ } else if (nsso && nsso->so_proto->pr_protocol == ISOPROTO_CLTP) {
lph->lph_nam = dup_sockaddr(nam, 1);
lph->lph_flag |= (LC_VALID | LC_CLTP);
+#endif
} else {
lph->lph_flag |= (LC_VALID | LC_SREF);
lph->lph_slp = slp;
@@ -450,6 +455,7 @@ nqsrv_cmpnam(slp, nam, lph)
register struct sockaddr_in *saddr;
struct sockaddr *addr;
union nethostaddr lhaddr;
+ struct socket *nsso;
int ret;
if (slp == NQLOCALSLP) {
@@ -458,15 +464,21 @@ nqsrv_cmpnam(slp, nam, lph)
else
return (0);
}
- if (slp == nfs_udpsock || slp == nfs_cltpsock)
+ nsso = slp->ns_so;
+ if (nsso && nsso->so_proto->pr_protocol == IPPROTO_UDP) {
addr = nam;
- else
+#ifdef ISO
+ } else if (nsso && nsso->so_proto->pr_protocol == ISOPROTO_CLTP) {
+ addr = nam;
+#endif
+ } else {
addr = slp->ns_nam;
- if (lph->lph_flag & LC_UDP)
+ }
+ if (lph->lph_flag & LC_UDP) {
ret = netaddr_match(AF_INET, &lph->lph_haddr, addr);
- else if (lph->lph_flag & LC_CLTP)
+ } else if (lph->lph_flag & LC_CLTP) {
ret = netaddr_match(AF_ISO, &lph->lph_claddr, addr);
- else {
+ } else {
if ((lph->lph_slp->ns_flag & SLP_VALID) == 0)
return (0);
saddr = (struct sockaddr_in *)lph->lph_slp->ns_nam;
@@ -517,10 +529,10 @@ nqsrv_send_eviction(vp, lp, slp, nam, cred)
saddr->sin_family = AF_INET;
saddr->sin_addr.s_addr = lph->lph_inetaddr;
saddr->sin_port = lph->lph_port;
- so = nfs_udpsock->ns_so;
+ so = lph->lph_slp->ns_so;
} else if (lph->lph_flag & LC_CLTP) {
nam2 = lph->lph_nam;
- so = nfs_cltpsock->ns_so;
+ so = lph->lph_slp->ns_so;
} else if (lph->lph_slp->ns_flag & SLP_VALID) {
nam2 = (struct sockaddr *)0;
so = lph->lph_slp->ns_so;
OpenPOWER on IntegriCloud