[PATCH BlueZ 1/2] mesh: Fix logic in AppKey deletion

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



When deleting an AppKey from a node, call mesh_config_app_key_del()
only from appkey level (i.e., keep it contained in appkey.c and
remove the duplicate call in node.c)

Also, simplify the node_app_key_delete() argument list.
---
 mesh/appkey.c |  6 +++---
 mesh/node.c   | 29 ++---------------------------
 mesh/node.h   |  4 ++--
 3 files changed, 7 insertions(+), 32 deletions(-)

diff --git a/mesh/appkey.c b/mesh/appkey.c
index e96d5228a..3a1fd8a54 100644
--- a/mesh/appkey.c
+++ b/mesh/appkey.c
@@ -419,13 +419,13 @@ int appkey_key_delete(struct mesh_net *net, uint16_t net_idx,
 	if (key->net_idx != net_idx)
 		return MESH_STATUS_INVALID_NETKEY;
 
-	node_app_key_delete(net, mesh_net_get_address(net), net_idx, app_idx);
+	node = mesh_net_node_get(net);
+
+	node_app_key_delete(node, net_idx, app_idx);
 
 	l_queue_remove(app_keys, key);
 	appkey_key_free(key);
 
-	node = mesh_net_node_get(net);
-
 	if (!mesh_config_app_key_del(node_config_get(node), net_idx, app_idx))
 		return MESH_STATUS_STORAGE_FAIL;
 
diff --git a/mesh/node.c b/mesh/node.c
index 3154d6bf4..78219d9d7 100644
--- a/mesh/node.c
+++ b/mesh/node.c
@@ -135,15 +135,6 @@ struct managed_obj_request {
 
 static struct l_queue *nodes;
 
-static bool match_node_unicast(const void *a, const void *b)
-{
-	const struct mesh_node *node = a;
-	uint16_t dst = L_PTR_TO_UINT(b);
-
-	return (dst >= node->primary &&
-		dst <= (node->primary + node->num_ele - 1));
-}
-
 static bool match_device_uuid(const void *a, const void *b)
 {
 	const struct mesh_node *node = a;
@@ -216,15 +207,6 @@ static int compare_model_id(const void *a, const void *b, void *user_data)
 	return 0;
 }
 
-
-struct mesh_node *node_find_by_addr(uint16_t addr)
-{
-	if (!IS_UNICAST(addr))
-		return NULL;
-
-	return l_queue_find(nodes, match_node_unicast, L_UINT_TO_PTR(addr));
-}
-
 struct mesh_node *node_find_by_uuid(uint8_t uuid[16])
 {
 	return l_queue_find(nodes, match_device_uuid, uuid);
@@ -627,24 +609,17 @@ bool node_is_provisioned(struct mesh_node *node)
 	return (!IS_UNASSIGNED(node->primary));
 }
 
-bool node_app_key_delete(struct mesh_net *net, uint16_t addr,
-				uint16_t net_idx, uint16_t app_idx)
+void node_app_key_delete(struct mesh_node *node, uint16_t net_idx,
+							uint16_t app_idx)
 {
-	struct mesh_node *node;
 	const struct l_queue_entry *entry;
 
-	node = node_find_by_addr(addr);
-	if (!node)
-		return false;
-
 	entry = l_queue_get_entries(node->elements);
 	for (; entry; entry = entry->next) {
 		struct node_element *ele = entry->data;
 
 		mesh_model_app_key_delete(node, ele->models, app_idx);
 	}
-
-	return mesh_config_app_key_del(node->cfg, net_idx, app_idx);
 }
 
 uint16_t node_get_primary(struct mesh_node *node)
diff --git a/mesh/node.h b/mesh/node.h
index c718c038d..a6bc4a2a6 100644
--- a/mesh/node.h
+++ b/mesh/node.h
@@ -40,8 +40,8 @@ struct mesh_node *node_find_by_uuid(uint8_t uuid[16]);
 struct mesh_node *node_find_by_token(uint64_t token);
 bool node_is_provisioner(struct mesh_node *node);
 bool node_is_provisioned(struct mesh_node *node);
-bool node_app_key_delete(struct mesh_net *net, uint16_t addr,
-				uint16_t net_idx, uint16_t idx);
+void node_app_key_delete(struct mesh_node *node, uint16_t net_idx,
+							uint16_t app_idx);
 uint16_t node_get_primary(struct mesh_node *node);
 uint16_t node_get_primary_net_idx(struct mesh_node *node);
 void node_set_token(struct mesh_node *node, uint8_t token[8]);
-- 
2.21.1




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux