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].
|
||||
func (tk *TestKeys) findAddrsWithoutTLSHandshake(domain string, addresses []string) (output []string) {
|
||||
const (
|
||||
resolved = 1 << iota
|
||||
resolvedByProbe = 1 << iota
|
||||
handshakeOK
|
||||
hasObviousIPv6Issues
|
||||
)
|
||||
mapping := make(map[string]int)
|
||||
|
||||
|
@ -364,7 +365,30 @@ func (tk *TestKeys) findAddrsWithoutTLSHandshake(domain string, addresses []stri
|
|||
if _, found := mapping[addr]; !found {
|
||||
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
|
||||
// excluding though the ones with obvious IPv6 issues
|
||||
for addr, flags := range mapping {
|
||||
if flags == 0 {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,7 +36,7 @@ func (m *Measurer) ExperimentName() string {
|
|||
|
||||
// ExperimentVersion implements model.ExperimentMeasurer.
|
||||
func (m *Measurer) ExperimentVersion() string {
|
||||
return "0.5.9"
|
||||
return "0.5.10"
|
||||
}
|
||||
|
||||
// Run implements model.ExperimentMeasurer.
|
||||
|
|
Loading…
Reference in New Issue
Block a user