diff options
author | alfred <alfred@FreeBSD.org> | 2002-07-15 19:40:23 +0000 |
---|---|---|
committer | alfred <alfred@FreeBSD.org> | 2002-07-15 19:40:23 +0000 |
commit | df766765ba15b2a418b09b713353a763a1c12909 (patch) | |
tree | 08c1766490b20ea5dcdd86157dd05bf33f410b18 /sys/nfsserver/nfs_srvsubs.c | |
parent | c559b8902789e64b5a4b1e482f230e933cda7198 (diff) | |
download | FreeBSD-src-df766765ba15b2a418b09b713353a763a1c12909.zip FreeBSD-src-df766765ba15b2a418b09b713353a763a1c12909.tar.gz |
Add IPv6 support.
Submitted by: Jean-Luc Richier <Jean-Luc.Richier@imag.fr>
Diffstat (limited to 'sys/nfsserver/nfs_srvsubs.c')
-rw-r--r-- | sys/nfsserver/nfs_srvsubs.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/sys/nfsserver/nfs_srvsubs.c b/sys/nfsserver/nfs_srvsubs.c index 5f37b1f..19a74d7 100644 --- a/sys/nfsserver/nfs_srvsubs.c +++ b/sys/nfsserver/nfs_srvsubs.c @@ -46,6 +46,8 @@ __FBSDID("$FreeBSD$"); * copy data between mbuf chains and uio lists. */ +#include "opt_inet6.h" + #include <sys/param.h> #include <sys/systm.h> #include <sys/kernel.h> @@ -1051,7 +1053,9 @@ nfsrv_fhtovp(fhandle_t *fhp, int lockflag, struct vnode **vpp, #ifdef MNT_EXNORESPORT if (!(exflags & (MNT_EXNORESPORT|MNT_EXPUBLIC))) { saddr = (struct sockaddr_in *)nam; - if (saddr->sin_family == AF_INET && + if ((saddr->sin_family == AF_INET || + saddr->sin_family == AF_INET6) && + /* same code for INET and INET6: sin*_port at same offet */ ntohs(saddr->sin_port) >= IPPORT_RESERVED) { vput(*vpp); *vpp = NULL; @@ -1117,6 +1121,21 @@ netaddr_match(int family, union nethostaddr *haddr, struct sockaddr *nam) inetaddr->sin_addr.s_addr == haddr->had_inetaddr) return (1); break; +#ifdef INET6 + case AF_INET6: + { + register struct sockaddr_in6 *inet6addr1, *inet6addr2; + + inet6addr1 = (struct sockaddr_in6 *)nam; + inet6addr2 = (struct sockaddr_in6 *)haddr->had_nam; + /* XXX - should test sin6_scope_id ? */ + if (inet6addr1->sin6_family == AF_INET6 && + IN6_ARE_ADDR_EQUAL(&inet6addr1->sin6_addr, + &inet6addr2->sin6_addr)) + return (1); + break; + } +#endif default: break; }; |