diff --git a/TODO b/TODO index ac9960ada0..0ae4cb79d0 100644 --- 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 +* 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//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