summaryrefslogtreecommitdiffstats
path: root/lib/object.c
diff options
context:
space:
mode:
authorroopa <roopa@cumulusnetworks.com>2012-11-01 21:13:30 (GMT)
committerThomas Graf <tgraf@redhat.com>2012-11-05 12:58:50 (GMT)
commitbc7c822f54ac2b22d0d6595ca756464cf087c3a1 (patch)
tree370b8e4344752ae9b307296ccc93fd0927876f65 /lib/object.c
parent690264a193c2cf548e3561bec3c7bbe3e4407ee4 (diff)
downloadlibnl-bc7c822f54ac2b22d0d6595ca756464cf087c3a1.zip
libnl-bc7c822f54ac2b22d0d6595ca756464cf087c3a1.tar.gz
libnl-bc7c822f54ac2b22d0d6595ca756464cf087c3a1.tar.bz2
Add support for updating objects in the cache
This patch adds support to update a cache object during cache_include instead of the current approach of deleting the original object and adding a new one. This operation is conditional on the object implementing the operation. If the update is not successful, cache_include falls back to the existing cache inclusion process of deleting and adding the object. It adds a new object operation called oo_update. oo_update takes two objects as arguments, first being the existing cache object that needs update, the second argument being the new object. Currently it is left to the implementor to use the msg type to decide wether to delete or add the new object attributes to the old one. But the operation type or msg type can be easily made part of the object arguments. The motivation for this change is explained below in the context of including support for AF_BRIDGE objects into the link cache. libnl today deletes an object before it includes an identical object. But for some objects like the AF_BRIDGE objects this does not work well. link cache uses the ifindex as its key in object searches. If link cache were to support AF_BRIDGE family objects, todays implementation, - will replace the original link object with the bridge port link object for add notifications - And a bridge port delete notification from kernel would delete the link object from the cache leaving the cache without the link object until the kernel sends another notification for that link The bridge port link notification contains some base link object attributes plus bridge specific protocol info attributes. In such cases we think an operation to update the existing object in place in cache might be useful. This can be made to work for AF_INET6 link objects too. Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com> Reviewed-by: Nolan Leake <nolan@cumulusnetworks.com> Reviewed-by: Shrijeet Mukherjee <shm@cumulusnetworks.com> Reviewed-by: Wilson Kok <wkok@cumulusnetworks.com>
Diffstat (limited to 'lib/object.c')
-rw-r--r--lib/object.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/object.c b/lib/object.c
index 585189e..d58f9a7 100644
--- a/lib/object.c
+++ b/lib/object.c
@@ -139,6 +139,23 @@ struct nl_object *nl_object_clone(struct nl_object *obj)
}
/**
+ * Merge a cacheable object
+ * @arg dst object to be merged into
+ * @arg src new object to be merged into dst
+ *
+ * @return 0 or a negative error code.
+ */
+int nl_object_update(struct nl_object *dst, struct nl_object *src)
+{
+ struct nl_object_ops *ops = obj_ops(dst);
+
+ if (ops->oo_update)
+ return ops->oo_update(dst, src);
+
+ return -NLE_OPNOTSUPP;
+}
+
+/**
* Free a cacheable object
* @arg obj object to free
*