summaryrefslogtreecommitdiff
path: root/src/devices/nm-device-bridge.c
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2014-09-17 14:17:30 -0500
committerDan Williams <dcbw@redhat.com>2015-05-06 16:14:24 -0500
commit71bde20c302ba321688f203a8c5cd1e2d296f0d1 (patch)
treede7ee24260d67931c4c622eee2629447e990c43d /src/devices/nm-device-bridge.c
parentcd3df12c8f8ed6c868c12bc4e7fe6ba162dafc5b (diff)
downloadNetworkManager-71bde20c302ba321688f203a8c5cd1e2d296f0d1.tar.gz
core: let device plugins advertise supported link and setting types
Instead of looping over all plugins and asking each plugin whether it can handle a link or a connection, have them advertise the link and connection types they support, and use that when creating new devices.
Diffstat (limited to 'src/devices/nm-device-bridge.c')
-rw-r--r--src/devices/nm-device-bridge.c39
1 files changed, 17 insertions, 22 deletions
diff --git a/src/devices/nm-device-bridge.c b/src/devices/nm-device-bridge.c
index 0d9a76c466..f5219b02dd 100644
--- a/src/devices/nm-device-bridge.c
+++ b/src/devices/nm-device-bridge.c
@@ -479,16 +479,13 @@ nm_device_bridge_class_init (NMDeviceBridgeClass *klass)
static NMDevice *
new_link (NMDeviceFactory *factory, NMPlatformLink *plink, GError **error)
{
- if (plink->type == NM_LINK_TYPE_BRIDGE) {
- return (NMDevice *) g_object_new (NM_TYPE_DEVICE_BRIDGE,
- NM_DEVICE_PLATFORM_DEVICE, plink,
- NM_DEVICE_DRIVER, "bridge",
- NM_DEVICE_TYPE_DESC, "Bridge",
- NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_BRIDGE,
- NM_DEVICE_IS_MASTER, TRUE,
- NULL);
- }
- return NULL;
+ return (NMDevice *) g_object_new (NM_TYPE_DEVICE_BRIDGE,
+ NM_DEVICE_PLATFORM_DEVICE, plink,
+ NM_DEVICE_DRIVER, "bridge",
+ NM_DEVICE_TYPE_DESC, "Bridge",
+ NM_DEVICE_DEVICE_TYPE, NM_DEVICE_TYPE_BRIDGE,
+ NM_DEVICE_IS_MASTER, TRUE,
+ NULL);
}
static NMDevice *
@@ -497,21 +494,15 @@ create_virtual_device_for_connection (NMDeviceFactory *factory,
NMDevice *parent,
GError **error)
{
- const char *iface;
+ const char *iface = nm_connection_get_interface_name (connection);
NMSettingBridge *s_bridge;
const char *mac_address_str;
guint8 mac_address[NM_UTILS_HWADDR_LEN_MAX];
- if (!nm_connection_is_type (connection, NM_SETTING_BRIDGE_SETTING_NAME))
- return NULL;
-
- g_return_val_if_fail (connection != NULL, NULL);
-
- iface = nm_connection_get_interface_name (connection);
- g_return_val_if_fail (iface != NULL, NULL);
+ g_assert (iface);
s_bridge = nm_connection_get_setting_bridge (connection);
- g_return_val_if_fail (s_bridge, NULL);
+ g_assert (s_bridge);
mac_address_str = nm_setting_bridge_get_mac_address (s_bridge);
if (mac_address_str) {
@@ -524,8 +515,10 @@ create_virtual_device_for_connection (NMDeviceFactory *factory,
mac_address_str ? mac_address : NULL,
mac_address_str ? ETH_ALEN : 0)
&& nm_platform_get_error (NM_PLATFORM_GET) != NM_PLATFORM_ERROR_EXISTS) {
- nm_log_warn (LOGD_DEVICE | LOGD_BRIDGE, "(%s): failed to create bridge master interface for '%s': %s",
- iface, nm_connection_get_id (connection),
+ g_set_error (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_CREATION_FAILED,
+ "Failed to create bridge interface '%s' for '%s': %s",
+ iface,
+ nm_connection_get_id (connection),
nm_platform_get_error_msg (NM_PLATFORM_GET));
return NULL;
}
@@ -539,7 +532,9 @@ create_virtual_device_for_connection (NMDeviceFactory *factory,
NULL);
}
-DEFINE_DEVICE_FACTORY_INTERNAL(BRIDGE, Bridge, bridge,
+NM_DEVICE_FACTORY_DEFINE_INTERNAL (BRIDGE, Bridge, bridge,
+ NM_DEVICE_FACTORY_DECLARE_LINK_TYPES (NM_LINK_TYPE_BRIDGE)
+ NM_DEVICE_FACTORY_DECLARE_SETTING_TYPES (NM_SETTING_BRIDGE_SETTING_NAME),
factory_iface->new_link = new_link;
factory_iface->create_virtual_device_for_connection = create_virtual_device_for_connection;
)