Add a runtime warning when adding a device without an vendor-id or protocol set

Also, allow setting the protocol in the quirk file if required.
This commit is contained in:
Richard Hughes 2019-12-20 09:41:29 +00:00
parent 5bf8c1a23b
commit 7f765005e2
5 changed files with 63 additions and 0 deletions

View File

@ -743,6 +743,10 @@ fu_device_set_quirk_kv (FuDevice *self,
fu_device_set_vendor_id (self, value);
return TRUE;
}
if (g_strcmp0 (key, FU_QUIRKS_PROTOCOL) == 0) {
fu_device_set_protocol (self, value);
return TRUE;
}
if (g_strcmp0 (key, FU_QUIRKS_VERSION) == 0) {
fu_device_set_version (self, value, fu_device_get_version_format (self));
return TRUE;

View File

@ -63,3 +63,4 @@ gboolean fu_quirks_lookup_by_id_iter (FuQuirks *self,
#define FU_QUIRKS_INSTALL_DURATION "InstallDuration"
#define FU_QUIRKS_VERSION_FORMAT "VersionFormat"
#define FU_QUIRKS_GTYPE "GType"
#define FU_QUIRKS_PROTOCOL "Protocol"

View File

@ -63,6 +63,8 @@ fu_plugin_coldplug (FuPlugin *plugin, GError **error)
g_autoptr(FuDevice) child2 = NULL;
child1 = fu_device_new ();
fu_device_set_vendor_id (child1, "USB:FFFF");
fu_device_set_protocol (child1, "com.acme");
fu_device_set_physical_id (child1, "fake");
fu_device_set_logical_id (child1, "child1");
fu_device_add_guid (child1, "7fddead7-12b5-4fb9-9fa0-6d30305df755");
@ -73,6 +75,8 @@ fu_plugin_coldplug (FuPlugin *plugin, GError **error)
fu_plugin_device_add (plugin, child1);
child2 = fu_device_new ();
fu_device_set_vendor_id (child2, "USB:FFFF");
fu_device_set_protocol (child2, "com.acme");
fu_device_set_physical_id (child2, "fake");
fu_device_set_logical_id (child2, "child2");
fu_device_add_guid (child2, "b8fe6b45-8702-4bcd-8120-ef236caac76f");

View File

@ -4140,6 +4140,14 @@ fu_engine_add_device (FuEngine *self, FuDevice *device)
}
}
/* does the device not have an assigned protocol */
if (fu_device_has_flag (device, FWUPD_DEVICE_FLAG_UPDATABLE) &&
fu_device_get_protocol (device) == NULL) {
g_warning ("device %s [%s] does define an update protocol",
fu_device_get_id (device),
fu_device_get_name (device));
}
/* if this device is locked get some metadata from AppStream */
if (fu_device_has_flag (device, FWUPD_DEVICE_FLAG_LOCKED)) {
g_autoptr(XbNode) component = fu_engine_get_component_by_guids (self, device);
@ -4189,6 +4197,14 @@ fu_engine_add_device (FuEngine *self, FuDevice *device)
if (!fu_device_has_flag (device, FWUPD_DEVICE_FLAG_REGISTERED))
fu_engine_plugin_device_register (self, device);
/* does the device *still* not have a vendor ID? */
if (fu_device_has_flag (device, FWUPD_DEVICE_FLAG_UPDATABLE) &&
fu_device_get_vendor_id (device) == NULL) {
g_warning ("device %s [%s] does not define a vendor-id!",
fu_device_get_id (device),
fu_device_get_name (device));
}
/* create new device */
fu_device_list_add (self->device_list, device);

View File

@ -544,6 +544,8 @@ fu_engine_requirements_other_device_func (gconstpointer user_data)
/* set up a different device */
fu_device_set_id (device2, "id2");
fu_device_set_vendor_id (device2, "USB:FFFF");
fu_device_set_protocol (device2, "com.acme");
fu_device_set_name (device2, "Secondary firmware");
fu_device_set_version (device2, "4.5.6", FWUPD_VERSION_FORMAT_TRIPLET);
fu_device_set_vendor_id (device2, "FFFF");
@ -607,6 +609,8 @@ fu_engine_requirements_parent_device_func (gconstpointer user_data)
/* set up a parent device */
fu_device_set_id (device1, "parent");
fu_device_set_vendor_id (device1, "USB:FFFF");
fu_device_set_protocol (device1, "com.acme");
fu_device_set_name (device1, "parent");
fu_device_set_version (device1, "1.2.3", FWUPD_VERSION_FORMAT_TRIPLET);
fu_device_add_guid (device1, "12345678-1234-1234-1234-123456789012");
@ -649,12 +653,16 @@ fu_engine_device_priority_func (gconstpointer user_data)
/* add low prio then high then low */
fu_device_set_id (device1, "id1");
fu_device_set_vendor_id (device1, "USB:FFFF");
fu_device_set_protocol (device1, "com.acme");
fu_device_set_priority (device1, 0);
fu_device_set_plugin (device1, "udev");
fu_device_add_instance_id (device1, "GUID1");
fu_device_convert_instance_ids (device1);
fu_engine_add_device (engine, device1);
fu_device_set_id (device2, "id2");
fu_device_set_vendor_id (device2, "USB:FFFF");
fu_device_set_protocol (device2, "com.acme");
fu_device_set_priority (device2, 1);
fu_device_set_plugin (device2, "redfish");
fu_device_add_instance_id (device2, "GUID1");
@ -662,6 +670,8 @@ fu_engine_device_priority_func (gconstpointer user_data)
fu_device_convert_instance_ids (device2);
fu_engine_add_device (engine, device2);
fu_device_set_id (device3, "id3");
fu_device_set_vendor_id (device3, "USB:FFFF");
fu_device_set_protocol (device3, "com.acme");
fu_device_set_priority (device3, 0);
fu_device_set_plugin (device3, "uefi");
fu_device_add_instance_id (device3, "GUID1");
@ -688,6 +698,8 @@ fu_engine_device_priority_func (gconstpointer user_data)
/* add extra devices that should sort */
fu_device_set_id (device4, "id4");
fu_device_set_vendor_id (device4, "USB:FFFF");
fu_device_set_protocol (device4, "com.acme");
fu_device_set_priority (device4, 0);
fu_device_set_plugin (device4, "redfish");
fu_device_add_instance_id (device4, "GUID4");
@ -695,6 +707,8 @@ fu_engine_device_priority_func (gconstpointer user_data)
fu_device_convert_instance_ids (device4);
fu_engine_add_device (engine, device4);
fu_device_set_id (device5, "id5");
fu_device_set_vendor_id (device5, "USB:FFFF");
fu_device_set_protocol (device5, "com.acme");
fu_device_set_priority (device5, 0);
fu_device_set_plugin (device5, "uefi");
fu_device_add_instance_id (device5, "GUID5");
@ -731,6 +745,8 @@ fu_engine_device_parent_func (gconstpointer user_data)
/* add child */
fu_device_set_id (device1, "child");
fu_device_set_vendor_id (device2, "USB:FFFF");
fu_device_set_protocol (device2, "com.acme");
fu_device_add_instance_id (device1, "child-GUID-1");
fu_device_add_parent_guid (device1, "parent-GUID");
fu_device_convert_instance_ids (device1);
@ -738,6 +754,8 @@ fu_engine_device_parent_func (gconstpointer user_data)
/* parent */
fu_device_set_id (device2, "parent");
fu_device_set_vendor_id (device2, "USB:FFFF");
fu_device_set_protocol (device2, "com.acme");
fu_device_add_instance_id (device2, "parent-GUID");
fu_device_set_vendor (device2, "oem");
fu_device_convert_instance_ids (device2);
@ -787,10 +805,14 @@ fu_engine_partial_hash_func (gconstpointer user_data)
/* add two dummy devices */
fu_device_set_id (device1, "device1");
fu_device_set_vendor_id (device1, "USB:FFFF");
fu_device_set_protocol (device1, "com.acme");
fu_device_set_plugin (device1, "test");
fu_device_add_guid (device1, "12345678-1234-1234-1234-123456789012");
fu_engine_add_device (engine, device1);
fu_device_set_id (device2, "device21");
fu_device_set_vendor_id (device2, "USB:FFFF");
fu_device_set_protocol (device2, "com.acme");
fu_device_set_plugin (device2, "test");
fu_device_set_equivalent_id (device2, "b92f5b7560b84ca005a79f5a15de3c003ce494cf");
fu_device_add_guid (device2, "12345678-1234-1234-1234-123456789012");
@ -862,6 +884,8 @@ fu_engine_device_unlock_func (gconstpointer user_data)
/* add a dummy device */
fu_device_set_id (device, "UEFI-dummy-dev0");
fu_device_set_vendor_id (device, "USB:FFFF");
fu_device_set_protocol (device, "com.acme");
fu_device_add_guid (device, "2d47f29b-83a2-4f31-a2e8-63474f4d4c2e");
fu_device_add_flag (device, FWUPD_DEVICE_FLAG_LOCKED);
fu_device_set_version_format (device, FWUPD_VERSION_FORMAT_PLAIN);
@ -910,6 +934,8 @@ fu_engine_require_hwid_func (gconstpointer user_data)
/* add a dummy device */
fu_device_set_id (device, "test_device");
fu_device_set_vendor_id (device, "USB:FFFF");
fu_device_set_protocol (device, "com.acme");
fu_device_set_version (device, "1.2.2", FWUPD_VERSION_FORMAT_TRIPLET);
fu_device_add_guid (device, "12345678-1234-1234-1234-123456789012");
fu_device_add_flag (device, FWUPD_DEVICE_FLAG_UPDATABLE);
@ -1042,6 +1068,8 @@ fu_engine_downgrade_func (gconstpointer user_data)
/* add a device so we can get upgrades and downgrades */
fu_device_set_version (device, "1.2.3", FWUPD_VERSION_FORMAT_TRIPLET);
fu_device_set_id (device, "test_device");
fu_device_set_vendor_id (device, "USB:FFFF");
fu_device_set_protocol (device, "com.acme");
fu_device_set_name (device, "Test Device");
fu_device_add_guid (device, "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
fu_device_add_flag (device, FWUPD_DEVICE_FLAG_UPDATABLE);
@ -1136,6 +1164,8 @@ fu_engine_install_duration_func (gconstpointer user_data)
/* add a device so we can get the install duration */
fu_device_set_version (device, "1.2.3", FWUPD_VERSION_FORMAT_TRIPLET);
fu_device_set_id (device, "test_device");
fu_device_set_vendor_id (device, "USB:FFFF");
fu_device_set_protocol (device, "com.acme");
fu_device_add_guid (device, "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
fu_device_set_install_duration (device, 999);
fu_device_add_flag (device, FWUPD_DEVICE_FLAG_UPDATABLE);
@ -1196,6 +1226,8 @@ fu_engine_history_func (gconstpointer user_data)
/* add a device so we can get upgrade it */
fu_device_set_version (device, "1.2.2", FWUPD_VERSION_FORMAT_TRIPLET);
fu_device_set_id (device, "test_device");
fu_device_set_vendor_id (device, "USB:FFFF");
fu_device_set_protocol (device, "com.acme");
fu_device_set_name (device, "Test Device");
fu_device_set_plugin (device, "test");
fu_device_add_guid (device, "12345678-1234-1234-1234-123456789012");
@ -1318,6 +1350,8 @@ fu_engine_history_inherit (gconstpointer user_data)
/* add a device so we can get upgrade it */
fu_device_set_version (device, "1.2.2", FWUPD_VERSION_FORMAT_TRIPLET);
fu_device_set_id (device, "test_device");
fu_device_set_vendor_id (device, "USB:FFFF");
fu_device_set_protocol (device, "com.acme");
fu_device_set_name (device, "Test Device");
fu_device_set_plugin (device, "test");
fu_device_add_guid (device, "12345678-1234-1234-1234-123456789012");
@ -1377,6 +1411,8 @@ fu_engine_history_inherit (gconstpointer user_data)
fu_engine_add_plugin (engine, self->plugin);
device = fu_device_new ();
fu_device_set_id (device, "test_device");
fu_device_set_vendor_id (device, "USB:FFFF");
fu_device_set_protocol (device, "com.acme");
fu_device_set_name (device, "Test Device");
fu_device_add_guid (device, "12345678-1234-1234-1234-123456789012");
fu_device_set_version (device, "1.2.2", FWUPD_VERSION_FORMAT_TRIPLET);
@ -1422,6 +1458,8 @@ fu_engine_history_error_func (gconstpointer user_data)
/* add a device so we can get upgrade it */
fu_device_set_version (device, "1.2.2", FWUPD_VERSION_FORMAT_TRIPLET);
fu_device_set_id (device, "test_device");
fu_device_set_vendor_id (device, "USB:FFFF");
fu_device_set_protocol (device, "com.acme");
fu_device_set_name (device, "Test Device");
fu_device_set_plugin (device, "test");
fu_device_add_guid (device, "12345678-1234-1234-1234-123456789012");