diff options
author | Lubomir Rintel <lkundrak@v3.sk> | 2017-06-01 11:57:42 +0200 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2017-06-01 11:57:42 +0200 |
commit | bf7e86128c85141b6e30af1b671b023bfac0998d (patch) | |
tree | 3eb5fa946ce3a7f4993f22c1f9206f78559e84c1 | |
parent | b0f9571d3d6c5dff53c677ae2841126cd482e363 (diff) | |
download | NetworkManager-bf7e86128c85141b6e30af1b671b023bfac0998d.tar.gz |
bridge: move the Bluetooth NAP logic to bridge devicelr/bluetooth-nap
The Bluetooth NAP functionality seems only useful for the bridges. Move
it away from NMDevice.
-rw-r--r-- | src/devices/bluetooth/nm-bluez5-manager.c | 2 | ||||
-rw-r--r-- | src/devices/nm-device-bridge.c | 73 | ||||
-rw-r--r-- | src/devices/nm-device-bridge.h | 2 | ||||
-rw-r--r-- | src/devices/nm-device.c | 61 | ||||
-rw-r--r-- | src/devices/nm-device.h | 2 |
5 files changed, 76 insertions, 64 deletions
diff --git a/src/devices/bluetooth/nm-bluez5-manager.c b/src/devices/bluetooth/nm-bluez5-manager.c index a2d1a4c214..83028a2c85 100644 --- a/src/devices/bluetooth/nm-bluez5-manager.c +++ b/src/devices/bluetooth/nm-bluez5-manager.c @@ -33,7 +33,7 @@ #include "nm-utils/c-list.h" #include "nm-bluez-device.h" #include "nm-bluez-common.h" -#include "devices/nm-device.h" +#include "devices/nm-device-bridge.h" #include "settings/nm-settings.h" /*****************************************************************************/ diff --git a/src/devices/nm-device-bridge.c b/src/devices/nm-device-bridge.c index 01c4eb224b..c281dbad0c 100644 --- a/src/devices/nm-device-bridge.c +++ b/src/devices/nm-device-bridge.c @@ -49,6 +49,56 @@ G_DEFINE_TYPE (NMDeviceBridge, nm_device_bridge, NM_TYPE_DEVICE) /*****************************************************************************/ +const NMBtVTableNetworkServer *nm_bt_vtable_network_server = NULL; + +static gboolean +bt_network_server_available (NMConnection *connection) +{ + NMSettingBluetooth *s_bt = _nm_connection_get_setting_bluetooth_for_nap (connection); + + if (!s_bt) + return TRUE; + if (!nm_bt_vtable_network_server) + return FALSE; + return nm_bt_vtable_network_server->is_available (nm_bt_vtable_network_server, + nm_setting_bluetooth_get_bdaddr (s_bt)); +} + +static gboolean +bt_network_server_register (NMDevice *self) +{ + NMConnection *connection = nm_device_get_applied_connection (self); + NMSettingBluetooth *s_bt = _nm_connection_get_setting_bluetooth_for_nap (connection); + + if (!s_bt) + return TRUE; + if (!nm_bt_vtable_network_server) + return FALSE; + return nm_bt_vtable_network_server->register_bridge (nm_bt_vtable_network_server, + nm_setting_bluetooth_get_bdaddr (s_bt), + self); +} + +static void +bt_network_server_unregister (NMDevice *self) +{ + NMConnection *connection = nm_device_get_applied_connection (self); + NMSettingBluetooth *s_bt; + + if (!connection) + return; + s_bt = _nm_connection_get_setting_bluetooth_for_nap (connection); + if (!s_bt) + return; + + if (!nm_bt_vtable_network_server) + return; + nm_bt_vtable_network_server->unregister_bridge (nm_bt_vtable_network_server, + self); +} + +/*****************************************************************************/ + static NMDeviceCapabilities get_generic_capabilities (NMDevice *dev) { @@ -67,6 +117,9 @@ check_connection_available (NMDevice *device, NMDeviceCheckConAvailableFlags flags, const char *specific_object) { + if (!bt_network_server_available (connection)) + return FALSE; + /* Connections are always available because the carrier state is determined * by the bridge port carrier states, not the bridge's state. */ @@ -324,6 +377,24 @@ act_stage1_prepare (NMDevice *device, NMDeviceStateReason *out_failure_reason) return NM_ACT_STAGE_RETURN_SUCCESS; } +static NMActStageReturn +act_stage2_config (NMDevice *device, NMDeviceStateReason *out_failure_reason) +{ + if (!bt_network_server_register (device)) { + /* The HCI we could use is no longer present. */ + *out_failure_reason = NM_DEVICE_STATE_REASON_REMOVED; + return NM_ACT_STAGE_RETURN_FAILURE; + } + + return NM_ACT_STAGE_RETURN_SUCCESS; +} + +static void +deactivate (NMDevice *device) +{ + bt_network_server_unregister (device); +} + static gboolean enslave_slave (NMDevice *device, NMDevice *slave, @@ -443,6 +514,8 @@ nm_device_bridge_class_init (NMDeviceBridgeClass *klass) parent_class->create_and_realize = create_and_realize; parent_class->act_stage1_prepare = act_stage1_prepare; + parent_class->act_stage2_config = act_stage2_config; + parent_class->deactivate = deactivate; parent_class->enslave_slave = enslave_slave; parent_class->release_slave = release_slave; parent_class->get_configured_mtu = nm_device_get_configured_mtu_for_wired; diff --git a/src/devices/nm-device-bridge.h b/src/devices/nm-device-bridge.h index f0fa1f4b64..44b4ed729a 100644 --- a/src/devices/nm-device-bridge.h +++ b/src/devices/nm-device-bridge.h @@ -35,4 +35,6 @@ typedef struct _NMDeviceBridgeClass NMDeviceBridgeClass; GType nm_device_bridge_get_type (void); +extern const NMBtVTableNetworkServer *nm_bt_vtable_network_server; + #endif /* __NETWORKMANAGER_DEVICE_BRIDGE_H__ */ diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index 65621006ad..e11b7158fb 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -4364,56 +4364,6 @@ dnsmasq_state_changed_cb (NMDnsMasqManager *manager, guint32 status, gpointer us /*****************************************************************************/ -const NMBtVTableNetworkServer *nm_bt_vtable_network_server = NULL; - -static gboolean -bt_network_server_available (NMConnection *connection) -{ - NMSettingBluetooth *s_bt = _nm_connection_get_setting_bluetooth_for_nap (connection); - - if (!s_bt) - return TRUE; - if (!nm_bt_vtable_network_server) - return FALSE; - return nm_bt_vtable_network_server->is_available (nm_bt_vtable_network_server, - nm_setting_bluetooth_get_bdaddr (s_bt)); -} - -static gboolean -bt_network_server_register (NMDevice *self) -{ - NMConnection *connection = nm_device_get_applied_connection (self); - NMSettingBluetooth *s_bt = _nm_connection_get_setting_bluetooth_for_nap (connection); - - if (!s_bt) - return TRUE; - if (!nm_bt_vtable_network_server) - return FALSE; - return nm_bt_vtable_network_server->register_bridge (nm_bt_vtable_network_server, - nm_setting_bluetooth_get_bdaddr (s_bt), - self); -} - -static void -bt_network_server_unregister (NMDevice *self) -{ - NMConnection *connection = nm_device_get_applied_connection (self); - NMSettingBluetooth *s_bt; - - if (!connection) - return; - s_bt = _nm_connection_get_setting_bluetooth_for_nap (connection); - if (!s_bt) - return; - - if (!nm_bt_vtable_network_server) - return; - nm_bt_vtable_network_server->unregister_bridge (nm_bt_vtable_network_server, - self); -} - -/*****************************************************************************/ - static gboolean activation_source_handle_cb4 (gpointer user_data) { @@ -4799,12 +4749,6 @@ activate_stage2_device_config (NMDevice *self) nm_device_queue_recheck_assume (info->slave); } - if (!bt_network_server_register (self)) { - /* The HCI we could use is no longer present. */ - nm_device_state_changed (self, NM_DEVICE_STATE_FAILED, NM_DEVICE_STATE_REASON_REMOVED); - return; - } - lldp_init (self, TRUE); nm_device_activate_schedule_stage3_ip_config_start (self); } @@ -11494,9 +11438,6 @@ _nm_device_check_connection_available (NMDevice *self, { NMDeviceState state; - if (!bt_network_server_available (connection)) - return FALSE; - /* an unrealized software device is always available, hardware devices never. */ if (!nm_device_is_real (self)) { if (nm_device_is_software (self)) @@ -11938,8 +11879,6 @@ _cleanup_generic_pre (NMDevice *self, CleanupType cleanup_type) queued_state_clear (self); - bt_network_server_unregister (self); - _cleanup_ip4_pre (self, cleanup_type); _cleanup_ip6_pre (self, cleanup_type); } diff --git a/src/devices/nm-device.h b/src/devices/nm-device.h index 00685ee29b..e7d79947cc 100644 --- a/src/devices/nm-device.h +++ b/src/devices/nm-device.h @@ -716,6 +716,4 @@ struct _NMBtVTableNetworkServer { NMDevice *device); }; -extern const NMBtVTableNetworkServer *nm_bt_vtable_network_server; - #endif /* __NETWORKMANAGER_DEVICE_H__ */ |