Since the same interface could be used for both DHCPv4 and DHCPv6 we
can't just use 'iface' for tracking DHCP client lease changes. Instead
use a generated client ID, and track DHCP events based on the client's
PID instead of interface name.
Previously, ppp code would flip device state to _NEED_AUTH before
asking for secrets update; this is not the case anymore after landing
of f28a0df4a66e8f6c98327691c9c90df0604bbd28; hence, we need to
allow update of secrets in all ACTIVATING stages.
This patch updates this behaviour for all device classes with ppp
support.
Don't immediately tear down an active wired connection when the carrier
flips to off, but wait a few seconds for it to come back before breaking
the user's network.
Instead of doing this in every device subclass, do it in the NMDevice
superclass. nm_device_can_activate() already did the same logic that
each of the subclass device_state_changed() handlers were doing to
figure out whether they could do the transition from unavailable
to disconnected, so just use that in NMDevice and kill lots of code.
Keep a reference to the netlink monitor for as long as we have
signals attached to it. Also don't bother looking up the ifindex
in the carrier state signal handlers since we already have it
lying around in priv.
We don't actually care when pppd goes into the 'network' phase or the
'authenticate' phase, because we're looking for the IP4 configuration
to come back, and the device is already in the IP_CONFIG state.
Handling those phases would cause the device's state to jump around
between NEED_AUTH and IP_CONFIG when we were already past that phase.
Specifically, when the PPP link went down, the device would jump from
FAILED to IP_CONFIG because pppd entered the 'network' phase when
cleaning up the link. The device would also jump from IP_CONFIG to
NEED_AUTH during the connection process when we already had secrets.
With the addition of IPv6, both v4 and v6 configuration are run in
parallel, and when both have finished, then activation can proceed.
Unfortunately, two of the 3 users of PPP (PPPoE and 3G) ran PPP at
stage2, and when the PPP IPv4 config was received, jumped directly
to activation stage4. That caused the IPv6 code never to run, and
thus we hung at stage4 waiting for it to complete when nothing had
started it in the first place.
Instead, move PPP to stage3 so that
nm_device_activate_stage3_ip_config_start() can kick off both v4
and v6 IP code and we can successfully complete IP configuration
in all cases. PPP previously being in stage2 was an artifact of
the more simplistic pre-IPv6 configuration code where it didn't
matter if you skipped stage3.
The only thing that doesn't work yet is the system-settings service's
"auto eth" connections for ethernet devices that don't have an existing
connection. Might also have issues with unmanaged devices that can't
provide a MAC address until they are brought up, but we'll see.
* include/NetworkManager.h
introspection/nm-device.xml
- Add device state change reason for carrier changes
* src/nm-device-ethernet.c
- (set_carrier): use the carrier change reason when changing device
state in response to carrier changes
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@4203 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
* src/ppp-manager/nm-ppp-manager.c
src/ppp-manager/nm-ppp-manager.h
- (impl_ppp_manager_need_secrets): tries secrets twice before asking
the settings daemon for completely new ones
- (create_pppd_cmd_line): new parameter 'ppp_name' used to set the
local PPP peer name; allow PPP debuging by launching NM with
the environment variable NM_PPP_DEBUG defined
- (nm_ppp_manager_start): new parameter 'ppp_name' passed to
create_pppd_cmd_line()
* src/nm-serial-device.c
src/nm-serial-device.h
- New 'get_ppp_name' function for subclasses to implement to return the
local PPP peer name
- (real_act_stage2_config): call 'get_ppp_name' function of subclasses
and pass that name to the PPP manager
* src/nm-device-ethernet.c
- (pppoe_stage2_config): pass the PPPoE username to the PPP manager as
the local peer name
* src/nm-cdma-device.c
- (real_get_ppp_name): implement using the CDMA username
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@4141 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
Fix bgo #549401 (inspired by patch from Alexander Sack)
* src/nm-device-ethernet.c
- (finish_supplicant_task): clean up scheduled tasks and free memory
- (remove_supplicant_interface_error_handler): remove the supplicant
error idle callback too
- (supplicant_interface_release): rename from supplicant_interface_clean
to match nm-device-wifi.c; clean up supplicant interface-related
state tasks when the supplicant interface is disposed of
- (schedule_state_handler): add scheduled tasks to a list so they can
be cleaned up later
- (supplicant_mgr_state_cb_handler, supplicant_iface_state_cb_handler,
supplicant_iface_connection_state_cb_handler): use
finish_supplicant_task() to clean up each completed task
- (supplicant_iface_connection_error_cb_handler,
supplicant_connection_timeout_cb): clear source id when the task is
complete
- (supplicant_iface_connection_error_cb): save scheduled task id for
later cleanup
- (nm_device_ethernet_dispose): clean up any pending supplicant state
tasks
* src/nm-device-wifi.c
- (finish_supplicant_task): clean up scheduled tasks and free memory
- (remove_supplicant_interface_error_handler): remove the supplicant
error idle callback too
- (supplicant_interface_release): clean up supplicant interface-related
state tasks when the supplicant interface is disposed of
- (schedule_state_handler): add scheduled tasks to a list so they can
be cleaned up later
- (supplicant_mgr_state_cb_handler, supplicant_iface_state_cb_handler,
supplicant_iface_connection_state_cb_handler): use
finish_supplicant_task() to clean up each completed task
- (supplicant_iface_connection_error_cb_handler): clear source id when
the task is complete
- (supplicant_iface_connection_error_cb): save scheduled task id for
later cleanup
- (nm_device_wifi_dispose): clean up any pending supplicant state tasks
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@4105 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
* include/NetworkManager.h
introspection/nm-device.xml
- Add a "missing firmware" device state reason
* src/NetworkManagerSystem.c
src/NetworkManagerSystem.h
- (nm_system_device_set_up_down): add a no_firmware argument
- (nm_system_device_set_up_down_with_iface): if the result of setting
IFF_UP is ENOENT, that almost always means missing firmware
* src/backends/NetworkManagerGeneric.c
src/nm-device-ethernet.c
src/nm-device-private.h
src/nm-device-wifi.c
src/nm-device.c
src/nm-device.h
src/nm-hso-gsm-device.c
src/vpn-manager/nm-vpn-connection.c
- Pass no_firmware along; check it where appropriate
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3983 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
Handle multiple concurrent PPP connections.
* src/ppp-manager/nm-ppp-manager.c
src/ppp-manager/nm-ppp-manager.h
- (constructor): only PPP Manager request bus name once; each
NMPPPManager object gets a unique object path
- (nm_ppp_manager_class_init, get_property, set_property,
nm_ppp_manager_new, nm_ppp_manager_start): pass parent interface in
at construct time
- (impl_ppp_manager_need_secrets, impl_ppp_manager_set_state): don't
remove timeout until PPP manager gets an IP4 config
- (create_pppd_cmd_line): pass dbus object path as 'ipparam' so that
the plugin can call back to this specific PPP manager instance
* src/nm-device-ethernet.c
src/nm-serial-device.c
- Pass parent device in nm_ppp_manager_new()
* src/nm-gsm-device.c
src/nm-cdma-device.c
- (device_state_changed): don't close serial device on NEED_AUTH
state changed, that's not a failure case like the rest are
* src/ppp-manager/nm-pppd-plugin.c
- (nm_ip_up): always use index 0 into the ipcp options, because NM always
binds one interface to any pppd process, thus the correct index
is always 0; send PHASE_DEAD on error to alert NM immediately of
problems; try harder to get a peer address in spite of pppd
- (plugin_init): use 'ipparam' as the object path back to our specific
PPP manager instance
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3894 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
Modify the NMDevice::state-changed signal to include the previous state
and reason. Enables the applet to provide more information why device
activation failed.
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3819 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
Fix mobile broadband username/password issues. NM was never requesting
mobile broadband secrets, nor was it passing back the username and password
if it had them.
* marshallers/nm-marshal.list
- Add some new types for activation request objects
* src/nm-activation-request.c
src/nm-activation-request.h
- (get_secrets_cb): pass the caller type in the signal
- (nm_act_request_request_connection_secrets): take a caller type, so
that GetSecrets() reply handlers know who asked for the secrets in
the first place; use secret hints too so the settings service can
figure out exactly what NM wants (ie, PIN or the PPP password)
* src/ppp-manager/nm-ppp-manager.c
src/ppp-manager/nm-ppp-manager.h
- (impl_ppp_manager_need_secrets): nm_connection_need_secrets() won't
detect needed secrets when the secret could be blank, like GSM/CDMA
passwords. So always ask for secrets, and send a hint as to what
secret we really want.
- (nm_ppp_manager_update_secrets): make function more generic by making
the device specific class figure out the username and password, and
accept an error argument to return back over D-Bus
* src/nm-device-wifi.c
- (link_timeout_cb, handle_auth_or_fail): update for changes to
nm_act_request_request_connection_secrets()
- (real_connection_secrets_updated): update for 'caller' changes
* src/nm-device.c
src/nm-device.h
- (connection_secrets_updated_cb, connection_secrets_failed_cb): update
for 'caller' changes
* src/nm-device-ethernet.c
- (real_connection_secrets_updated): update for 'caller' changes and
move logic for getting PPPoE username and password here before
calling nm_ppp_manager_update_secrets()
- (link_timeout_cb, handle_auth_or_fail): update for changes to
nm_act_request_request_connection_secrets()
* src/nm-cdma-device.c
- (real_connection_secrets_updated): pass username and password back
to the PPP manager when required
* src/nm-gsm-device.c
- (enter_pin): send the required secret name to the settings service
- (real_connection_secrets_updated): pass username and password back
to the PPP manager when required
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3794 4912f4e0-d625-0410-9fb7-b9a5a253dbdc