提交 d7d20440 编写于 作者: C Chuck Lever 提交者: J. Bruce Fields

lockd: Adjust nlmclnt_lookup_host() signature to accomodate non-AF_INET

Pass a struct sockaddr * and a length to nlmclnt_lookup_host() to
accomodate non-AF_INET family addresses.

As a side benefit, eliminate the hostname_len argument, as the hostname
is always NUL-terminated.
Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
上级 88541c84
...@@ -58,10 +58,9 @@ struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init) ...@@ -58,10 +58,9 @@ struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init)
if (status < 0) if (status < 0)
return ERR_PTR(status); return ERR_PTR(status);
host = nlmclnt_lookup_host((struct sockaddr_in *)nlm_init->address, host = nlmclnt_lookup_host(nlm_init->address, nlm_init->addrlen,
nlm_init->protocol, nlm_version, nlm_init->protocol, nlm_version,
nlm_init->hostname, nlm_init->hostname);
strlen(nlm_init->hostname));
if (host == NULL) { if (host == NULL) {
lockd_down(); lockd_down();
return ERR_PTR(-ENOLCK); return ERR_PTR(-ENOLCK);
......
...@@ -264,32 +264,42 @@ nlm_destroy_host(struct nlm_host *host) ...@@ -264,32 +264,42 @@ nlm_destroy_host(struct nlm_host *host)
kfree(host); kfree(host);
} }
/* /**
* Find an NLM server handle in the cache. If there is none, create it. * nlmclnt_lookup_host - Find an NLM host handle matching a remote server
* @sap: network address of server
* @salen: length of server address
* @protocol: transport protocol to use
* @version: NLM protocol version
* @hostname: '\0'-terminated hostname of server
*
* Returns an nlm_host structure that matches the passed-in
* [server address, transport protocol, NLM version, server hostname].
* If one doesn't already exist in the host cache, a new handle is
* created and returned.
*/ */
struct nlm_host *nlmclnt_lookup_host(const struct sockaddr_in *sin, struct nlm_host *nlmclnt_lookup_host(const struct sockaddr *sap,
int proto, u32 version, const size_t salen,
const char *hostname, const unsigned short protocol,
unsigned int hostname_len) const u32 version, const char *hostname)
{ {
const struct sockaddr source = { const struct sockaddr source = {
.sa_family = AF_UNSPEC, .sa_family = AF_UNSPEC,
}; };
struct nlm_lookup_host_info ni = { struct nlm_lookup_host_info ni = {
.server = 0, .server = 0,
.sap = (struct sockaddr *)sin, .sap = sap,
.salen = sizeof(*sin), .salen = salen,
.protocol = proto, .protocol = protocol,
.version = version, .version = version,
.hostname = hostname, .hostname = hostname,
.hostname_len = hostname_len, .hostname_len = strlen(hostname),
.src_sap = &source, .src_sap = &source,
.src_len = sizeof(source), .src_len = sizeof(source),
}; };
dprintk("lockd: %s(host='%s', vers=%u, proto=%s)\n", __func__, dprintk("lockd: %s(host='%s', vers=%u, proto=%s)\n", __func__,
(hostname ? hostname : "<none>"), version, (hostname ? hostname : "<none>"), version,
(proto == IPPROTO_UDP ? "udp" : "tcp")); (protocol == IPPROTO_UDP ? "udp" : "tcp"));
return nlm_lookup_host(&ni); return nlm_lookup_host(&ni);
} }
......
...@@ -215,10 +215,11 @@ void nlmclnt_next_cookie(struct nlm_cookie *); ...@@ -215,10 +215,11 @@ void nlmclnt_next_cookie(struct nlm_cookie *);
/* /*
* Host cache * Host cache
*/ */
struct nlm_host *nlmclnt_lookup_host(const struct sockaddr_in *sin, struct nlm_host *nlmclnt_lookup_host(const struct sockaddr *sap,
int proto, u32 version, const size_t salen,
const char *hostname, const unsigned short protocol,
unsigned int hostname_len); const u32 version,
const char *hostname);
struct nlm_host *nlmsvc_lookup_host(struct svc_rqst *, const char *, struct nlm_host *nlmsvc_lookup_host(struct svc_rqst *, const char *,
unsigned int); unsigned int);
struct rpc_clnt * nlm_bind_host(struct nlm_host *); struct rpc_clnt * nlm_bind_host(struct nlm_host *);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册