summaryrefslogtreecommitdiff
path: root/TODO
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2012-02-27 11:07:53 -0600
committerDan Williams <dcbw@redhat.com>2012-02-27 11:07:53 -0600
commit51e0cf5f0fee86fcf764af81fc8ba0bc6012be3b (patch)
tree6bfeb45496daf8d6fd2e53ccef04ecc569c416ec /TODO
parentf828785428b1fae64cfcfd27546a8f1983010bd3 (diff)
downloadNetworkManager-51e0cf5f0fee86fcf764af81fc8ba0bc6012be3b.tar.gz
release: update TODO with enhanced connectivity check ideas
Diffstat (limited to 'TODO')
-rw-r--r--TODO38
1 files changed, 24 insertions, 14 deletions
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
-
-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