[OpenAFS-devel] NAT Patch and bugfix for vlserver
Jeffrey Hutzelman
jhutz@cmu.edu
Wed, 26 Apr 2006 12:28:26 -0400
On Wednesday, April 26, 2006 05:48:57 PM +0200 Tommie Gannert
<d00-tga@d.kth.se> wrote:
> Ok, does this have to do with the three variants of
>
> vlentry_to_{,u,n}vldbentry()
>
> in vlprocs.c? But how do i get 'vos listvldb' to list more than one
> address, for instance?
Yes, and more specifically, the difference between the
VL_GetEntryByName{O,N,U} RPC's. Applications which need to know all of the
relevant server addresses should use VL_GetEntryByNameU, which identifies
servers by UUID, followed by VL_GetAddrsU, which lets you look up a server
by UUID and get information like addresses. Eventually, the interface for
finding IPv6 addresses or servers on non-default ports will involve the
same approach, but with a replacement for VL_GetAddrsU which returns
additional server information.
Unfortunately, you can't get 'vos listvldb' to directly show you server
UUID's or more than one address per server. However, any given address can
only be assigned to one server, so you can take the server names or
addresses reported by 'vos listvldb' and feed them to 'vos listaddrs' to
find out the UUID and/or other addresses assigned to that server.
> If I remember correctly, buserver sends an address. One address. It
> seems like a small performance gain, though. butc could be doing the
> VLDB lookups in all passes.
I suspect that's not so much an attempt at improving performance as an
indication of how old the bu subsystem is and how little attention it got.
> I'm not sure if the clients are better off making the decision,
> though. If they are behind NAT with the same subnet as the server,
> things will get messy. The idea of using common address bits means
> it will resort to global address space pretty easily. However, it's
> a hack, yes.
Well, it's got to resort to a global address if it's not on the same
private network as the server. However, since the vlserver never gets to
see the client's private address, it's not really in a position to make the
right decision.
> Actually it affects any command line parameter which is strcmp-parsed
> after '-rxmaxmtu' (which was placed in the middle of the list). It
> says
>
> if (!strcmp(argv[i], "-rxmaxmtu")) ...
Sure. Which means that clause only triggers if argv[i] is "-rxmaxmtu". If
that string never appears on the command line, it's highly unlikely that
condition will ever be true.
In any event, this option is relatively new (it wasn't in 1.4.0), so I
doubt many people have noticed yet.