[Replicant] [PATCH v2] Fix "RepWifi connection not correctly reported to userspace apps" Issue #1792.
Joonas Kylmälä
joonas.kylmala at iki.fi
Mon Aug 7 00:38:00 UTC 2017
Fil:
> Joonas Kylmälä wrote:
>> It is common practice to define them at top of the file. Also the AOSP
>> guidelines have it:
>> <https://source.android.com/source/code-style#define-fields-in-standard-places>.
>> Well, now you might say that that is no reason but the thing is that
>> people are expecting them to be there and it makes it easier to read the
>> code for them if the things are in the familiar places.
> I didn't say there's no reason to put those declaration at the top of
> the file. I just said I have *my* reason to keep them where they are,
> but I could move them if some other *strong* reason is given.
>
> Anyway, I read those guidelines, and I tried to be as compliant as
> possible. What they actually say is: "Define fields either at the top of
> the file *or immediately before the methods that use them*." And that's
> what I did.
I'm not talking about the method below the declarations, but instead
about the code that is above the declarations:
+
+ // TODO RepWifi extension. Remove when a low-level, long-lived
solution is found.
+ if (ni == null) {
+ ni = getNetworkInfoByInterfaceName(IFACE_NAME_WIFI);
+ }
+ if (ni == null) {
+ ni = getNetworkInfoByInterfaceName(IFACE_NAME_TETHER);
+ }
+
>> No, I'm pretty sure my university network gives public ip addresses for
>> everyone connecting to their wifi.
> I'm pretty sure you should double check on that one. Please, see [1].
I tested it now. This is the output I get at the moment from ifconfig
while connected with wifi:
wlp4s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 2001:14ba:8023:4c00:85a2:186a:4075:4e49 prefixlen 64
scopeid 0x0<global>
inet6 fe80::e5fb:91cc:9fe2:7c44 prefixlen 64 scopeid 0x20<link>
ether 44:85:00:d3:c4:58 txqueuelen 1000 (Ethernet)
RX packets 3628258 bytes 4455552923 (4.1 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1647787 bytes 244108200 (232.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
So it gives global i.e. public ipv6 address.
>>> The reason why I put the additional condition that interface's address
>>> must be in the "site local" range, is that it tries to enforce the fact
>>> that WiFi negotiation hasn't failed.
>>> It's an effort to be "less uncertain" about the interface being
>>> *actually* connected to WiFi and try to avoid "false positives".
>>> For example, if something in the negotiation goes wrong, wlan0 could
>>> still have an IP address. Maybe it could be in the "link local" range.
>>> That condition cuts away at least that case, reducing the likelihood of
>>> reporting "false" connections.
>>
>> I don't know what to do about this.
>
> I honestly don't think anything else needs to be done on that side..
> Or.. well.. a DNS query or a ping could be issued to be sure the
> connection is real. But there are a few downsides with that approach:
> 1) it would cause way too much overhead and may make calling
> applications lag for too long or even crash if they think their request
> to getActiveNetworkInfo() has timed out (I've experienced this behaviour
> while debugging my patch).
> 2) hard-coded IP addresses should be included as DNS or ping targets. No
> good.
> 3) I'm quite sure that the original method itself doesn't perform any
> practical check on the reachability of the internet. It just reports
> what kind of connection the device is currently using (namely, data or
> wifi). And I don't want to change the original scope of the function so
> much.
>
We could check how the AOSP handles this problem when the wifi is
properly integrated with the OS. This is not so much on topic but could
get one started: <https://community.nxp.com/docs/DOC-93603>.
Joonas
More information about the Replicant
mailing list