| 
 
On Thu, 24 Apr 2008, Julius Volz wrote:
Hi Julius,
I'm replying in case no one else does, not because I have 
any good answers. 
How is the coding done in netfilter/ipv6? How about *BSD?
 This means that all IPv6 specific IPVS code would have to 
be very cleanly separated from the old code
 
I would think it better to have code that works, that has 
asthetic problems, than to have a whole pile of perfectly 
written code that never got released because you ran out of 
time. Someone else can clean it up later if the asthetics 
are that big a problem. 
 
Would it still be ok to use some of the same data structures for both
IP versions, by optionally including IPv6 address fields and address
family specifiers in them? Like this:
union ip_vs_addr {
       __be32                  v4;
#ifdef CONFIG_IP_VS_IPV6
       struct in6_addr         v6;
#endif
};
 
kernel people moan about #ifdefs but I don't know what they 
do to get around them. 
What if IPV6 in not turned on in NETWORKING and you don't 
have an #ifdef here, will in6_addr wind up being some NULL 
struct which will/can be ignored? 
 The problem with this is that the IPv6 fields would still 
be in there, wasting space,
 
the kernel is so large now, I don't think there can be any 
realistic claims on not wasting space. 
 Another option might be to have _all_ of IPVS depend on 
CONFIG_IPV6 once you enable IPv6 support for IPVS (and 
have that only as a Y/N option). That way, you could still 
have easier and more reuse within IPVS, but would that be 
acceptable?
 
sounds good to me. I wouldn't worry about this a whole lot 
just yet. I would be quite happy if in the first version 
ipv6 for ipvs came out with no user options - it's turned on 
whether the user wants it or not. The next iteration would 
be if IPV6 is turned on in NETWORKING, then ipv6 is turned 
on in ipvs. I wouldn't go beyond that - you want the kernel 
config to be as simple as possible. Anyone who wants ipv6 
off in ipvs(), while turning on IPV6 in NETWORKING can go 
figure it out for themselves. 
 After thinking about all this, it seems IPv6 in IPVS 
should be a collection of separate modules anyways, right? 
Even if that means a lot of duplication and extra 
maintenance (and maybe later, refactoring to reduce the 
duplication)...
 
you can't count on maintenance (the big cost in code is not 
writing it, but maintaining it). There's not a lot of people 
paying attention to ipvs() and you should plan on any code 
you submit to be in there unchanged for quite some time. You 
can see how few other people have wanted to tackle ipv6 for 
ipvs(). I would have/use as much code from the IPV6 layer as 
possible, where other people will maintain it, and have as 
little new code in ipvs() as possible, presumably just 
duplicated lines (with #ifdefs) making the ipv6 rather than 
ipv4 call. 
ipvs() is basically one module now. I wouldn't code up a 
collection of modules. The user will have to go figure out 
all the modules to load to get ipvs_ipv6 to work. This is a 
lot to ask. I think keeping ipvs() as one module would be 
best. Next option would be having an ipvs() and an 
ipvs_ipv6(). 
Thanks for plugging away at this.
Joe
--
Joseph Mack NA3T EME(B,D), FM05lw North Carolina
jmack (at) wm7d (dot) net - azimuthal equidistant map
generator at http://www.wm7d.net/azproj.shtml
Homepage http://www.austintek.com/ It's GNU/Linux!
--
To unsubscribe from this list: send the line "unsubscribe lvs-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html
 |