On Mon, 22 Aug 2011 15:23:48 -0400 "J. Bruce Fields" <bfields@xxxxxxxxxxxx> wrote: > On Sat, Aug 20, 2011 at 06:24:29PM +0800, Mi Jinlong wrote: > > For IPv6 local address, lockd can not callback to client for > > missing scope id when binding address at inet6_bind: > > > > 324 if (addr_type & IPV6_ADDR_LINKLOCAL) { > > 325 if (addr_len >= sizeof(struct sockaddr_in6) && > > 326 addr->sin6_scope_id) { > > 327 /* Override any existing binding, if another one > > 328 * is supplied by user. > > 329 */ > > 330 sk->sk_bound_dev_if = addr->sin6_scope_id; > > 331 } > > 332 > > 333 /* Binding to link-local address requires an interface */ > > 334 if (!sk->sk_bound_dev_if) { > > 335 err = -EINVAL; > > 336 goto out_unlock; > > 337 } > > > > This patch adds scope id to svc_addr_u for IPv6 address, and copy scope from > > xprt->xpt_local to rqstp->rq_daddr for use. > > > > With this patch, lockd can callback to client success. > > I guess this makes sense to me, but someone who understands IPv6 better > should comment... Chuck? Jeff? > Sounds like a reasonable explanation. Link-local addresses all have the same prefix, so we need a scopeid (aka interface ID# for linux) to know which interface we should send a call on. When I did the patches to allow NFSv4 callbacks to go over IPv6, I did something similar, but used the rq_addr. From gen_callback: struct sockaddr *sa = svc_addr(rqstp); u32 scopeid = rpc_get_scope_id(sa); ...and the scopeid was used to populate the scopeid of the callback address. The rq_daddr should be equivalent though. The _addr and _daddr must have the same scopeid or something is very wrong... That said, on a semi-related note... I have to wonder about statd in conjunction with link-local addresses. I have a hard time understanding how you'd ever get reboot notifications in such a setup. You might be able to make it work if /etc/hosts allowed you to put in a scopeid for an address, but even then it sounds sketchy... -- Jeff Layton <jlayton@xxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html