-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 19/02/10 14:46, Gert Doering wrote:
> 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.
Sounds good.
> 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.
Unless he merges in that needed function ;-)
> 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.
I have no opinion of what would be good or not in this regard ... I'm
just saying: Make these branches in a state where we can merge them into
allmerged. I'll leave the battleground to be fought between you two :)
>> 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.
>
I know that James prefer #ifdef. So if you want to have a safer bet
that this code goes into a stable tree, #ifdef will be a plus point for
inclusion. This is also the main reason why I am advocating #ifdef in
this part if the code.
On the other hand, there are drawbacks to #ifdef in regards to
maintenance, which you've put very well in your answer. And of course
the possibility of compile and run-time conflicts between #ifdef'ed
code. Where some #ifdef's either depend on other ones without really
being aware of it, or that it causes other issues during run-time.
I'm fine with whichever path you choose. But just bear in mind, some
systems might not have IPv6 support - which breaks portability ... and
#ifdef will make it easier for James to accept the patches.
I trust you guys will figure out how to go forward!
kind regards,
David Sommerseth
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/
iEYEARECAAYFAkt+oFgACgkQDC186MBRfrqXPACgiEOyi9QaH00WWmYD1DPmvlVH
wdQAnizs7ZGvHJc1EwcWaFRLjMkI/uSO
=AqI4
-----END PGP SIGNATURE-----