release: update TODO with enhanced connectivity check ideas

This commit is contained in:
Dan Williams 2012-02-27 11:07:53 -06:00
parent f828785428
commit 51e0cf5f0f

34
TODO
View File

@ -1,16 +1,30 @@
So you're interested in hacking on NetworkManager? Here's some cool
stuff you could do...
* Internet Connectivity Detection
* Internet Connectivity Detection Enhancements
This feature would consist of attempting to make an HTTP request to a known
DNS address and compare the response to a well-known string, like Windows does.
This feature and the server address should be configurable via an option in the
/etc/NetworkManager/NetworkManager.conf config file.
Current connectivity checking is global, while what we really want is to check
connectivity per-interface and update the global state based on the composite
of each device's state. Unfortunately that requires two things:
Once the device has successfully gotten an IPv4 or IPv6 address, it should
enter the state NM_DEVICE_STATE_IP_CHECK, where this HTTP request would be
performed. After the check was done, the device would set a property in
1) latest libsoup and glib for using libsoup connection state signals, which
allow us to set socket options before the actual connection is made; here
we'd bind the socket to the specific IP address of the interface we're
using, and possibly set SO_BINDTODEVICE as well
2) setting /proc/sys/net/ipv4/conf/<iface>/rp_filter to "2" which tells the
kernel to route the incoming and outgoing packet properly even though the
interface may not have the necessary routes
The first is the largest obstacle, but ideally we implement this and enable it
when we have the required glib and libsoup versions available. One other
complication is that this checking should be done during the
NM_DEVICE_STATE_IP_CHECK phase (along with other operations like WiFi hotspot
auto-login) while the current checks are done globally in nm-manager.c, so
keeping both code paths might be complex.
But ideally, once the device has successfully gotten an IPv4 or IPv6 address, it
should enter the state NM_DEVICE_STATE_IP_CHECK, where a connectivity check is
started. After the check returns, the device would set a property in
NMDevicePrivate to indicate whether Internet access was successful or not, and
advance to the NM_DEVICE_STATE_ACTIVATED state.
@ -19,10 +33,6 @@ nm_manager_update_state() function, would query this property and set
NM_STATE_CONNECTED_LOCAL, NM_STATE_CONNECTED_SITE, or NM_STATE_CONNECTED_GLOBAL
based on it and the device's state.
Ideally this feature would not require linking to an HTTP library like libcurl,
but would use open-coded simple HTTP or libsoup for the request. The request
must be done asynchronously, of course.
* ADSL support