Hi,

On Fri, Feb 19, 2010 at 12:10:29PM +0100, David Sommerseth wrote:
> >> I still need to do some touches for allmerged, as
> >> we conflict w/ Gert's IPv6 patch on a mroute.c chunk
> >> IIRC.
> 
> Even though I know you both have told me that there would be a merge
> conflict in mroute.c, I decided to put it on the mailing list -
> hopefully to get an open discussion about it!

Good :-)

> I've attached the merge conflict.  It would be great if you could sort
> this out soon.  Then I'll get both of your trees into the allmerged
> branch ASAP.  Right now only Gert's code is in the allmerged branch.

For the allmerged, you could use either one, or none at all(!) :-)

*I* think you should use mine, of course.  Reason explained below.


> What I do see might be a challenge (without knowing the code in
> details), is that JJO's code is using #ifdef, while Gert's code is not.
>  With a conflict in mroute_addr_print_ex(), which includes an #ifdef I
> see a potential disaster here.

The code basically does the same thing "add printing of the IPv6 
information for a mroute structure containing IPv6 information".

For OpenVPN to *work*, you need neither, it's just helpful diagnostic 
output :-) - if the code is unpatched,  it will just do

         buf_printf (&out, "IPV6");

for IPv6 mroutes, but not error-abort or fail.  So no danger here.


Now, for the different patches.

My patch "just prints the IPv6 address", using a helper function that
I added elsewhere (print_in6_addr()).  This function is not available
in the official tree, so JJO cannot use it for his branch.

JJO's patch does more than that, he does DNS lookups to print the
DNS name for the IPv6 address in question.  Now we enter religious
territory - *I* think that this is not a good thing.  The existing
code doesn't do reverse DNS lookups for IPv4 mroute printing, and so 
the IPv6 code should behave similar to the IPv4 code, and not do DNS 
either (also, depending on DNS lookup in this place might lead to 
weird delays in unexpected situations).  But this is partly religious, 
partly "follow the coding style of the existing code" stuff.

JJO's patch also adds the port number for MR_WITH_PORT mroutes - which
is something that never happens for my usage of IPv6 mroutes for 
IPv6 payload - but that could be easily added to my code.


> Personally, I would like to evaluate Gert's patches to see if they could
> be #ifdef'ed.  Then both IPv6 branches can both use USE_PF_INET6 to
> enable or disable the IPv6 support.  I have not studied these patches,
> so I don't know how doable that is.  And this is my personal opinion, I
> don't mean to instruct anyone into a direction.  I will let you guys
> find the proper direction.

Most changes of my patch could be #ifdef'ed easily - places that just add 
extra lines of code, extra fields to a structure, and such.  That's the easy
stuff.

Other parts are much harder, changes like this one:

       /* possibly add routes */
       if (!c->options.route_delay_defined)
-       do_route (&c->options, c->c1.route_list, c->c1.tuntap, c->plugins, c->c2
.es); 
+       do_route (&c->options, c->c1.route_list, c->c1.route_ipv6_list,
+                 c->c1.tuntap, c->plugins, c->c2.es);


... where I had to add extra arguments to a function call.  #ifdef'ing
that is going to produce really ugly and much harder-to-maintain code
(because you have to have an #else, with the old call syntax, and 
future changes of this function call always have to adjust *both* 
changes).


I've just re-checked JJO's patch - the #ifdef's in there don't cover
all the changes either, just the IPv6-specific stuff.  The necessary
changes to the existing IPv4 infrastructure (data structures etc) are
not #ifdef'ed - so the #ifdef's here don't serve to deactivate the
whole patch, but only to disable the actual IPv6 transport functionality.


Personally, I'm not a big fan of #ifdef'ing changes that affect so many 
different places of the code (JJO's patch has 109 chunks, my patch 
has 119 chunks) because it will make the code much harder to read, and
also harder to test ("how many different combinations of compile-time 
options need to be enabled to cover all possible code paths?").

But if that is what it takes to get the code integrated in the main
source, that's what I'll do.

gert
-- 
USENET is *not* the non-clickable part of WWW!
                                                           //www.muc.de/~gert/
Gert Doering - Munich, Germany                             g...@greenie.muc.de
fax: +49-89-35655025                        g...@net.informatik.tu-muenchen.de

Reply via email to