summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2012-03-07 11:45:40 -0600
committerDan Williams <dcbw@redhat.com>2012-03-07 11:45:40 -0600
commitbc50a2a75b87f78be08e14e9e290933ac2e21fba (patch)
treef9f9601435e8fbccb66bd0e587f486cd3abbc70d
parentc02702e5742e36f3c52f1fece5a3ae54a9c562d8 (diff)
downloadNetworkManager-bc50a2a75b87f78be08e14e9e290933ac2e21fba.tar.gz
cli: add VLAN device support
-rw-r--r--cli/src/connections.c44
-rw-r--r--cli/src/devices.c5
2 files changed, 49 insertions, 0 deletions
diff --git a/cli/src/connections.c b/cli/src/connections.c
index 8358467d93..d101c51bab 100644
--- a/cli/src/connections.c
+++ b/cli/src/connections.c
@@ -42,6 +42,7 @@
#include <nm-device-olpc-mesh.h>
#include <nm-device-infiniband.h>
#include <nm-device-bond.h>
+#include <nm-device-vlan.h>
#include <nm-remote-settings.h>
#include <nm-vpn-connection.h>
#include <nm-utils.h>
@@ -1506,6 +1507,47 @@ check_bond_compatible (NMDeviceBond *device, NMConnection *connection, GError **
}
static gboolean
+check_vlan_compatible (NMDeviceVlan *device, NMConnection *connection, GError **error)
+{
+ NMSettingConnection *s_con;
+ NMSettingVlan *s_vlan;
+ const char *ctype, *dev_iface_name, *vlan_iface_name;
+
+ s_con = nm_connection_get_setting_connection (connection);
+ g_assert (s_con);
+
+ ctype = nm_setting_connection_get_connection_type (s_con);
+ if (strcmp (ctype, NM_SETTING_VLAN_SETTING_NAME) != 0) {
+ g_set_error (error, 0, 0,
+ "The connection was not an VLAN connection.");
+ return FALSE;
+ }
+
+ s_vlan = nm_connection_get_setting_vlan (connection);
+ if (!s_vlan) {
+ g_set_error (error, 0, 0,
+ "The connection was not a valid VLAN connection.");
+ return FALSE;
+ }
+
+ if (nm_setting_vlan_get_id (s_vlan) != nm_device_vlan_get_vlan_id (NM_DEVICE_VLAN (device))) {
+ g_set_error (error, 0, 0,
+ "The connection did not match the device's VLAN ID.");
+ return FALSE;
+ }
+
+ dev_iface_name = nm_device_get_iface (NM_DEVICE (device));
+ vlan_iface_name = nm_setting_vlan_get_interface_name (s_vlan);
+ if (vlan_iface_name && g_strcmp0 (dev_iface_name, vlan_iface_name) != 0) {
+ g_set_error (error, 0, 0,
+ "The connection's and device's interface names did not match.");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
nm_device_is_connection_compatible (NMDevice *device, NMConnection *connection, GError **error)
{
g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
@@ -1529,6 +1571,8 @@ nm_device_is_connection_compatible (NMDevice *device, NMConnection *connection,
return check_infiniband_compatible (NM_DEVICE_INFINIBAND (device), connection, error);
else if (NM_IS_DEVICE_BOND (device))
return check_bond_compatible (NM_DEVICE_BOND (device), connection, error);
+ else if (NM_IS_DEVICE_VLAN (device))
+ return check_vlan_compatible (NM_DEVICE_VLAN (device), connection, error);
g_set_error (error, 0, 0, "unhandled device type '%s'", G_OBJECT_TYPE_NAME (device));
return FALSE;
diff --git a/cli/src/devices.c b/cli/src/devices.c
index e3ac114c95..0b1b6d6e4b 100644
--- a/cli/src/devices.c
+++ b/cli/src/devices.c
@@ -39,6 +39,7 @@
#endif
#include <nm-device-infiniband.h>
#include <nm-device-bond.h>
+#include <nm-device-vlan.h>
#include <nm-utils.h>
#include <nm-setting-ip4-config.h>
#include <nm-setting-ip6-config.h>
@@ -460,6 +461,8 @@ device_type_to_string (NMDevice *device)
return NM_SETTING_INFINIBAND_SETTING_NAME;
case NM_DEVICE_TYPE_BOND:
return NM_SETTING_BOND_SETTING_NAME;
+ case NM_DEVICE_TYPE_VLAN:
+ return NM_SETTING_VLAN_SETTING_NAME;
default:
return _("Unknown");
}
@@ -739,6 +742,8 @@ show_device_info (gpointer data, gpointer user_data)
hwaddr = nm_device_infiniband_get_hw_address (NM_DEVICE_INFINIBAND (device));
else if (NM_IS_DEVICE_BOND (device))
hwaddr = nm_device_bond_get_hw_address (NM_DEVICE_BOND (device));
+ else if (NM_IS_DEVICE_VLAN (device))
+ hwaddr = nm_device_vlan_get_hw_address (NM_DEVICE_VLAN (device));
state_str = g_strdup_printf ("%d (%s)", state, device_state_to_string (state));
reason_str = g_strdup_printf ("%d (%s)", reason, device_reason_to_string (reason));