Decision on how to move forward with IPv6 connectivity setup
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
DC++ |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
Recently we have added a bunch of code containing IPv6 improvements. The code originates from AirDC which iceman50 modified for Dice++.
In his initial commit http://
way he used/modified this code for Dice++. It introduces a bunch of new settings but some of them has only defaults and aren't propagated in the UI.
Above a few small bugs the main problem with the initial commit is that it breaks the zero configuration (so one magic switch does everything and the user should not need to configure anything in most cases) logic for auto connectivity setup that we've implemented for DC++ before and which has proven to be highly successful throughout the DC community.
Notably the patch adds *two* (one more) checkboxes for Automatic Connectivity Detection, one for each protocol (v4/v6). This layout would require the average user to know about IP protocols and such to decide things, a requirement of special knowledge of networking to set up connectivity at times, which we have already avoided years ago.
Hence a decision made to make things easier to the user and not to break the existing layout, see commit http://
At the same time there was a (not too fruitful) discussion about improving the added IPv6 auto setup (since the implementation in the patch doesn't do much, e.g. don't run mappers at all and knowledge about the necessity of mapping / hole-punching on v6 is missing/ambigous among the people discussing the problem) which ended up with a change in the v6 IP comparsion in the detection code (see the comments in the source in the commit).
It turned out later that these later changes cause connectivity issues in both an auto detected or in a manual setup on an IPv4 only environment.
After some investigation while exmining the AirDC source code and connectivity setup UI layout it has become evident that they use a different logic in connectivity setup than we do. They have only one pane in the settings dialog (called ProtocolPage in their source) where you can separately set the auto detection/manual setup for both v4 and v6 protocols as well as there's settings to completly disable the connectivity of any of the protocols. Moreover in their setup, the manual enable/disable switch has an effect to the automatic detection: if the manual connectivity is set to disabled for a protocol then it also blocks the auto detection for the said protocol.
This logic is completly different to ours, however, the code supporting this logic is already added to DC++ through the initial commit. Basically this, with the later changes committed, causes C-C connectivity issues in the tip revision of DC++ as of the day this report is posted.
AirDC also propagates all manual connectivity settings for v6 something which we should add to our UI anyway. The following patch from Pretorian does most of it: http://
However, we should decide in what way do we implement our v6 connectivity setup. Basically I can think of two ways, as follows:
#1
We keep our old logic so there's only one checkbox for Automatic Connectivity Setup. This either runs detection for both protocol or only for v4 for the time beeing. For the new manual v6 connectivity settings we set the v6 connectivity disabled by default.
Advantage: no change from the user's point of view. Still zero config setup that's easy to support.
Disadvantages:
- no way to set the auto detection to run for one protocol while use manual config for the other.
- requires changes to the ConnectivityManager code in added from AirDC
#2
We switch to a pair of auto detect checkboxes for one both protocols.
Advantages:
- the initial patch can be used more or less, with the exception of the manual enable/disable connectivity switches have effect on the automatic detection. We clearly don't need that.
- there's a way to set the auto detection to run for one protocol while use manual config for the other.
Disadvantage: change from the simple UI/logic we used to have which can make support cases more difficult at times.
Any of the two ways we choose I suggest keeping the v6 detection/manual connectivity disabled by default until we know more about topologies, mapping, what's when we got a public IP but we're behind a firewall, etc... since we already experienced that wrongly enabled v6 connectivity can cause C-C connectivity issues on ADC hubs.
Ideas, opinions, suggestions welcome!
description: | updated |
description: | updated |
description: | updated |
Changed in dcplusplus: | |
status: | In Progress → Fix Committed |
Personally, I would attempt to keep the noob / experienced distinction between automatic and manual connectivity settings.
That means:
- Only 1 "magic" check-box in automatic settings, that does both IPv4 & IPv6 detections (or only the IPv4 one while the IPv6 one is not yet polished / known not to have conflicts with the IPv4 one).
- 2 setting groups (or even possibly 2 setting pages) for manual connectivity.
I have no opinion on disabling IPv4 / IPv6 via manual connectivity settings; if it works, let's add it.
One point of attention: check how port mappers react when receiving requests for both IPv6 & IPv4 ports... Should work as long as it's for separate ports...