Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c7c7e48 authored by Chuck Lever's avatar Chuck Lever Committed by Trond Myklebust
Browse files

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: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 4c568017
Loading
Loading
Loading
Loading
+16 −5
Original line number Diff line number Diff line
@@ -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->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, (u8 *)&ap->sin_addr.s_addr, '\0', NULL))
		if (in4_pton(value, -1, addr, '\0', NULL))
			return;
	}

	sap->sa_family = AF_UNSPEC;
	*len = 0;