diff options
Diffstat (limited to 'net/sunrpc/addr.c')
| -rw-r--r-- | net/sunrpc/addr.c | 46 | 
1 files changed, 26 insertions, 20 deletions
diff --git a/net/sunrpc/addr.c b/net/sunrpc/addr.c index 1419d0cdbba..a622ad64acd 100644 --- a/net/sunrpc/addr.c +++ b/net/sunrpc/addr.c @@ -17,10 +17,12 @@   */  #include <net/ipv6.h> -#include <linux/sunrpc/clnt.h> +#include <linux/sunrpc/addr.h> +#include <linux/sunrpc/msg_prot.h>  #include <linux/slab.h> +#include <linux/export.h> -#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) +#if IS_ENABLED(CONFIG_IPV6)  static size_t rpc_ntop6_noscopeid(const struct sockaddr *sap,  				  char *buf, const int buflen) @@ -90,7 +92,7 @@ static size_t rpc_ntop6(const struct sockaddr *sap,  	return len;  } -#else	/* !(defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)) */ +#else	/* !IS_ENABLED(CONFIG_IPV6) */  static size_t rpc_ntop6_noscopeid(const struct sockaddr *sap,  				  char *buf, const int buflen) @@ -104,7 +106,7 @@ static size_t rpc_ntop6(const struct sockaddr *sap,  	return 0;  } -#endif	/* !(defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)) */ +#endif	/* !IS_ENABLED(CONFIG_IPV6) */  static int rpc_ntop4(const struct sockaddr *sap,  		     char *buf, const size_t buflen) @@ -151,12 +153,13 @@ static size_t rpc_pton4(const char *buf, const size_t buflen,  		return 0;  	sin->sin_family = AF_INET; -	return sizeof(struct sockaddr_in);; +	return sizeof(struct sockaddr_in);  } -#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) -static int rpc_parse_scope_id(const char *buf, const size_t buflen, -			      const char *delim, struct sockaddr_in6 *sin6) +#if IS_ENABLED(CONFIG_IPV6) +static int rpc_parse_scope_id(struct net *net, const char *buf, +			      const size_t buflen, const char *delim, +			      struct sockaddr_in6 *sin6)  {  	char *p;  	size_t len; @@ -176,7 +179,7 @@ static int rpc_parse_scope_id(const char *buf, const size_t buflen,  		unsigned long scope_id = 0;  		struct net_device *dev; -		dev = dev_get_by_name(&init_net, p); +		dev = dev_get_by_name(net, p);  		if (dev != NULL) {  			scope_id = dev->ifindex;  			dev_put(dev); @@ -196,7 +199,7 @@ static int rpc_parse_scope_id(const char *buf, const size_t buflen,  	return 0;  } -static size_t rpc_pton6(const char *buf, const size_t buflen, +static size_t rpc_pton6(struct net *net, const char *buf, const size_t buflen,  			struct sockaddr *sap, const size_t salen)  {  	struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sap; @@ -212,14 +215,14 @@ static size_t rpc_pton6(const char *buf, const size_t buflen,  	if (in6_pton(buf, buflen, addr, IPV6_SCOPE_DELIMITER, &delim) == 0)  		return 0; -	if (!rpc_parse_scope_id(buf, buflen, delim, sin6)) +	if (!rpc_parse_scope_id(net, buf, buflen, delim, sin6))  		return 0;  	sin6->sin6_family = AF_INET6;  	return sizeof(struct sockaddr_in6);  }  #else -static size_t rpc_pton6(const char *buf, const size_t buflen, +static size_t rpc_pton6(struct net *net, const char *buf, const size_t buflen,  			struct sockaddr *sap, const size_t salen)  {  	return 0; @@ -228,6 +231,7 @@ static size_t rpc_pton6(const char *buf, const size_t buflen,  /**   * rpc_pton - Construct a sockaddr in @sap + * @net: applicable network namespace   * @buf: C string containing presentation format IP address   * @buflen: length of presentation address in bytes   * @sap: buffer into which to plant socket address @@ -240,14 +244,14 @@ static size_t rpc_pton6(const char *buf, const size_t buflen,   * socket address, if successful.  Returns zero if an error   * occurred.   */ -size_t rpc_pton(const char *buf, const size_t buflen, +size_t rpc_pton(struct net *net, const char *buf, const size_t buflen,  		struct sockaddr *sap, const size_t salen)  {  	unsigned int i;  	for (i = 0; i < buflen; i++)  		if (buf[i] == ':') -			return rpc_pton6(buf, buflen, sap, salen); +			return rpc_pton6(net, buf, buflen, sap, salen);  	return rpc_pton4(buf, buflen, sap, salen);  }  EXPORT_SYMBOL_GPL(rpc_pton); @@ -255,12 +259,13 @@ EXPORT_SYMBOL_GPL(rpc_pton);  /**   * rpc_sockaddr2uaddr - Construct a universal address string from @sap.   * @sap: socket address + * @gfp_flags: allocation mode   *   * Returns a %NUL-terminated string in dynamically allocated memory;   * otherwise NULL is returned if an error occurred.  Caller must   * free the returned string.   */ -char *rpc_sockaddr2uaddr(const struct sockaddr *sap) +char *rpc_sockaddr2uaddr(const struct sockaddr *sap, gfp_t gfp_flags)  {  	char portbuf[RPCBIND_MAXUADDRPLEN];  	char addrbuf[RPCBIND_MAXUADDRLEN]; @@ -288,12 +293,12 @@ char *rpc_sockaddr2uaddr(const struct sockaddr *sap)  	if (strlcat(addrbuf, portbuf, sizeof(addrbuf)) > sizeof(addrbuf))  		return NULL; -	return kstrdup(addrbuf, GFP_KERNEL); +	return kstrdup(addrbuf, gfp_flags);  } -EXPORT_SYMBOL_GPL(rpc_sockaddr2uaddr);  /**   * rpc_uaddr2sockaddr - convert a universal address to a socket address. + * @net: applicable network namespace   * @uaddr: C string containing universal address to convert   * @uaddr_len: length of universal address string   * @sap: buffer into which to plant socket address @@ -305,8 +310,9 @@ EXPORT_SYMBOL_GPL(rpc_sockaddr2uaddr);   * Returns the size of the socket address if successful; otherwise   * zero is returned.   */ -size_t rpc_uaddr2sockaddr(const char *uaddr, const size_t uaddr_len, -			  struct sockaddr *sap, const size_t salen) +size_t rpc_uaddr2sockaddr(struct net *net, const char *uaddr, +			  const size_t uaddr_len, struct sockaddr *sap, +			  const size_t salen)  {  	char *c, buf[RPCBIND_MAXUADDRLEN + sizeof('\0')];  	unsigned long portlo, porthi; @@ -338,7 +344,7 @@ size_t rpc_uaddr2sockaddr(const char *uaddr, const size_t uaddr_len,  	port = (unsigned short)((porthi << 8) | portlo);  	*c = '\0'; -	if (rpc_pton(buf, strlen(buf), sap, salen) == 0) +	if (rpc_pton(net, buf, strlen(buf), sap, salen) == 0)  		return 0;  	switch (sap->sa_family) {  | 
