release: update TODO with enhanced connectivity check ideas
authorDan Williams <dcbw@redhat.com>
Mon, 27 Feb 2012 17:07:53 +0000 (11:07 -0600)
committerDan Williams <dcbw@redhat.com>
Mon, 27 Feb 2012 17:07:53 +0000 (11:07 -0600)
TODO

diff --git a/TODO b/TODO
index ac9960a..0ae4cb7 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,16 +1,30 @@
 So you're interested in hacking on NetworkManager?  Here's some cool
 stuff you could do...
 
-* Internet Connectivity Detection
-
-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.
-
-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
+* Internet Connectivity Detection Enhancements
+
+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:
+
+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