diff options
author | Dan Williams <dcbw@redhat.com> | 2012-03-07 11:45:40 -0600 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2012-03-07 11:45:40 -0600 |
commit | bc50a2a75b87f78be08e14e9e290933ac2e21fba (patch) | |
tree | f9f9601435e8fbccb66bd0e587f486cd3abbc70d /cli | |
parent | c02702e5742e36f3c52f1fece5a3ae54a9c562d8 (diff) |
cli: add VLAN device support
Diffstat (limited to 'cli')
-rw-r--r-- | cli/src/connections.c | 44 | ||||
-rw-r--r-- | cli/src/devices.c | 5 |
2 files changed, 49 insertions, 0 deletions
diff --git a/cli/src/connections.c b/cli/src/connections.c index 8358467d..d101c51b 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 e3ac114c..0b1b6d6e 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)); |