diff options
author | Dan Williams <dcbw@redhat.com> | 2012-02-27 11:07:53 -0600 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2012-02-27 11:07:53 -0600 |
commit | 51e0cf5f0fee86fcf764af81fc8ba0bc6012be3b (patch) | |
tree | 6bfeb45496daf8d6fd2e53ccef04ecc569c416ec /TODO | |
parent | f828785428b1fae64cfcfd27546a8f1983010bd3 (diff) | |
download | NetworkManager-51e0cf5f0fee86fcf764af81fc8ba0bc6012be3b.tar.gz |
release: update TODO with enhanced connectivity check ideas
Diffstat (limited to 'TODO')
-rw-r--r-- | TODO | 38 |
1 files changed, 24 insertions, 14 deletions
@@ -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 |