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

Commit c2e8139c authored by Bryan Schumaker's avatar Bryan Schumaker Committed by Steve French
Browse files

NFS: Use kernel DNS resolver [ver #2]



Use the kernel DNS resolver to translate hostnames to IP addresses.  Create a
new config option to choose between the legacy DNS resolver and the new
resolver.

Signed-off-by: default avatarBryan Schumaker <bjschuma@netapp.com>
Acked-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
parent 3694b91a
Loading
Loading
Loading
Loading
+16 −0
Original line number Original line Diff line number Diff line
@@ -100,3 +100,19 @@ config NFS_FSCACHE
	help
	help
	  Say Y here if you want NFS data to be cached locally on disc through
	  Say Y here if you want NFS data to be cached locally on disc through
	  the general filesystem cache manager
	  the general filesystem cache manager

config NFS_USE_LEGACY_DNS
	bool "Use the legacy NFS DNS resolver"
	depends on NFS_V4
	help
	  The kernel now provides a method for translating a host name into an
	  IP address.  Select Y here if you would rather use your own DNS
	  resolver script.

	  If unsure, say N

config NFS_USE_KERNEL_DNS
	bool
	depends on NFS_V4 && !NFS_USE_LEGACY_DNS
	select DNS_RESOLVER
	default y
+24 −0
Original line number Original line Diff line number Diff line
@@ -6,6 +6,29 @@
 * Resolves DNS hostnames into valid ip addresses
 * Resolves DNS hostnames into valid ip addresses
 */
 */


#ifdef CONFIG_NFS_USE_KERNEL_DNS

#include <linux/sunrpc/clnt.h>
#include <linux/dns_resolver.h>

ssize_t nfs_dns_resolve_name(char *name, size_t namelen,
		struct sockaddr *sa, size_t salen)
{
	ssize_t ret;
	char *ip_addr = NULL;
	int ip_len;

	ip_len = dns_query(NULL, name, namelen, NULL, &ip_addr, NULL);
	if (ip_len > 0)
		ret = rpc_pton(ip_addr, ip_len, sa, salen);
	else
		ret = -ESRCH;
	kfree(ip_addr);
	return ret;
}

#else

#include <linux/hash.h>
#include <linux/hash.h>
#include <linux/string.h>
#include <linux/string.h>
#include <linux/kmod.h>
#include <linux/kmod.h>
@@ -346,3 +369,4 @@ void nfs_dns_resolver_destroy(void)
	nfs_cache_unregister(&nfs_dns_resolve);
	nfs_cache_unregister(&nfs_dns_resolve);
}
}


#endif
+12 −0
Original line number Original line Diff line number Diff line
@@ -6,8 +6,20 @@


#define NFS_DNS_HOSTNAME_MAXLEN	(128)
#define NFS_DNS_HOSTNAME_MAXLEN	(128)



#ifdef CONFIG_NFS_USE_KERNEL_DNS
static inline int nfs_dns_resolver_init(void)
{
	return 0;
}

static inline void nfs_dns_resolver_destroy(void)
{}
#else
extern int nfs_dns_resolver_init(void);
extern int nfs_dns_resolver_init(void);
extern void nfs_dns_resolver_destroy(void);
extern void nfs_dns_resolver_destroy(void);
#endif

extern ssize_t nfs_dns_resolve_name(char *name, size_t namelen,
extern ssize_t nfs_dns_resolve_name(char *name, size_t namelen,
		struct sockaddr *sa, size_t salen);
		struct sockaddr *sa, size_t salen);