diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2007-12-10 20:59:35 +0100 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2008-01-30 08:05:57 +0100 |
commit | 3c7c7e4812e40e50a9ce9d687432ab5515cb3f2f (patch) | |
tree | f6c5a8d7c2e18525ca50cd08b356b7cd1ec4b764 /fs/nfs/super.c | |
parent | NFS: Support non-IPv4 addresses in nfs_parsed_mount_data (diff) | |
download | linux-3c7c7e4812e40e50a9ce9d687432ab5515cb3f2f.tar.xz linux-3c7c7e4812e40e50a9ce9d687432ab5515cb3f2f.zip |
NFS: Pull covers off IPv6 address parsing
Now that the needed IPv6 infrastructure is in place, allow the NFS client's
IP address parser to generate AF_INET6 addresses.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to '')
-rw-r--r-- | fs/nfs/super.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/fs/nfs/super.c b/fs/nfs/super.c index 7efc6a34b56b..3cbe32f3e88b 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c @@ -652,12 +652,23 @@ static void nfs_parse_server_address(char *value, struct sockaddr *sap, size_t *len) { - struct sockaddr_in *ap = (void *)sap; + if (strchr(value, ':')) { + struct sockaddr_in6 *ap = (struct sockaddr_in6 *)sap; + u8 *addr = (u8 *)&ap->sin6_addr.in6_u; - ap->sin_family = AF_INET; - *len = sizeof(*ap); - if (in4_pton(value, -1, (u8 *)&ap->sin_addr.s_addr, '\0', NULL)) - return; + ap->sin6_family = AF_INET6; + *len = sizeof(*ap); + if (in6_pton(value, -1, addr, '\0', NULL)) + return; + } else { + struct sockaddr_in *ap = (struct sockaddr_in *)sap; + u8 *addr = (u8 *)&ap->sin_addr.s_addr; + + ap->sin_family = AF_INET; + *len = sizeof(*ap); + if (in4_pton(value, -1, addr, '\0', NULL)) + return; + } sap->sa_family = AF_UNSPEC; *len = 0; |