fix(webconnectivity@v0.5): account for broken ipv6 in dnsdiff algorithm (#952)
See https://github.com/ooni/probe/issues/2284
This commit is contained in:
parent
2dd4e75945
commit
449b981f7f
|
@ -339,8 +339,9 @@ func (tk *TestKeys) analysisDNSDiffASN(probeAddrs, thAddrs []string) (asns []uin
|
||||||
// for which we couldn't successfully perform a TLS handshake for the given [domain].
|
// for which we couldn't successfully perform a TLS handshake for the given [domain].
|
||||||
func (tk *TestKeys) findAddrsWithoutTLSHandshake(domain string, addresses []string) (output []string) {
|
func (tk *TestKeys) findAddrsWithoutTLSHandshake(domain string, addresses []string) (output []string) {
|
||||||
const (
|
const (
|
||||||
resolved = 1 << iota
|
resolvedByProbe = 1 << iota
|
||||||
handshakeOK
|
handshakeOK
|
||||||
|
hasObviousIPv6Issues
|
||||||
)
|
)
|
||||||
mapping := make(map[string]int)
|
mapping := make(map[string]int)
|
||||||
|
|
||||||
|
@ -364,7 +365,30 @@ func (tk *TestKeys) findAddrsWithoutTLSHandshake(domain string, addresses []stri
|
||||||
if _, found := mapping[addr]; !found {
|
if _, found := mapping[addr]; !found {
|
||||||
continue // we're not interested into this addr
|
continue // we're not interested into this addr
|
||||||
}
|
}
|
||||||
mapping[addr] |= resolved
|
mapping[addr] |= resolvedByProbe
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// flag the subset of addrs with obvious IPv6 issues
|
||||||
|
//
|
||||||
|
// see https://github.com/ooni/probe/issues/2284 for more
|
||||||
|
// info on why we need to flag them
|
||||||
|
for _, connect := range tk.TCPConnect {
|
||||||
|
failure := connect.Status.Failure
|
||||||
|
if failure == nil {
|
||||||
|
continue // if we can connect, we don't have IPv6 issues
|
||||||
|
}
|
||||||
|
ipv6, err := netxlite.IsIPv6(connect.IP)
|
||||||
|
if err != nil {
|
||||||
|
continue // looks like a bug
|
||||||
|
}
|
||||||
|
if !ipv6 {
|
||||||
|
continue // not IPv6
|
||||||
|
}
|
||||||
|
hasIssues := (*failure == netxlite.FailureNetworkUnreachable ||
|
||||||
|
*failure == netxlite.FailureHostUnreachable)
|
||||||
|
if hasIssues {
|
||||||
|
mapping[connect.IP] |= hasObviousIPv6Issues
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -387,11 +411,15 @@ func (tk *TestKeys) findAddrsWithoutTLSHandshake(domain string, addresses []stri
|
||||||
}
|
}
|
||||||
|
|
||||||
// compute the list of addresses without the handshakeOK flag
|
// compute the list of addresses without the handshakeOK flag
|
||||||
|
// excluding though the ones with obvious IPv6 issues
|
||||||
for addr, flags := range mapping {
|
for addr, flags := range mapping {
|
||||||
if flags == 0 {
|
if flags == 0 {
|
||||||
continue // this looks like a bug
|
continue // this looks like a bug
|
||||||
}
|
}
|
||||||
if (flags & (resolved | handshakeOK)) == resolved {
|
if (flags & hasObviousIPv6Issues) != 0 {
|
||||||
|
continue // see https://github.com/ooni/probe/issues/2284
|
||||||
|
}
|
||||||
|
if (flags & (resolvedByProbe | handshakeOK)) == resolvedByProbe {
|
||||||
output = append(output, addr)
|
output = append(output, addr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ func (m *Measurer) ExperimentName() string {
|
||||||
|
|
||||||
// ExperimentVersion implements model.ExperimentMeasurer.
|
// ExperimentVersion implements model.ExperimentMeasurer.
|
||||||
func (m *Measurer) ExperimentVersion() string {
|
func (m *Measurer) ExperimentVersion() string {
|
||||||
return "0.5.9"
|
return "0.5.10"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run implements model.ExperimentMeasurer.
|
// Run implements model.ExperimentMeasurer.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user