diff mbox

[ovs-dev,2/3] lib: Refactor nested netlink APIs.

Message ID 1487293868-21605-2-git-send-email-azhou@ovn.org
State Accepted
Headers show

Commit Message

Andy Zhou Feb. 17, 2017, 1:11 a.m. UTC
Future patches will make use of those changes.

Signed-off-by: Andy Zhou <azhou@ovn.org>
---
 lib/netlink.c | 19 ++++++++++++++++---
 lib/netlink.h |  3 ++-
 2 files changed, 18 insertions(+), 4 deletions(-)

Comments

Jarno Rajahalme March 2, 2017, 10:59 p.m. UTC | #1
Acked-by: Jarno Rajahalme <jarno@ovn.org>

> On Feb 16, 2017, at 5:11 PM, Andy Zhou <azhou@ovn.org> wrote:
> 
> Future patches will make use of those changes.
> 
> Signed-off-by: Andy Zhou <azhou@ovn.org>
> ---
> lib/netlink.c | 19 ++++++++++++++++---
> lib/netlink.h |  3 ++-
> 2 files changed, 18 insertions(+), 4 deletions(-)
> 
> diff --git a/lib/netlink.c b/lib/netlink.c
> index ad7d35a..ae4c72a 100644
> --- a/lib/netlink.c
> +++ b/lib/netlink.c
> @@ -467,16 +467,29 @@ nl_msg_end_nested(struct ofpbuf *msg, size_t offset)
>     attr->nla_len = msg->size - offset;
> }
> 
> -/* Same as nls_msg_end_nested() when the nested Netlink contains non empty
> - * message. Otherwise, drop the nested message header from 'msg'.    */
> +/* Cancel a nested Netlink attribute in 'msg'.  'offset' should be the value
> + * returned by nl_msg_start_nested(). */
> void
> +nl_msg_cancel_nested(struct ofpbuf *msg, size_t offset)
> +{
> +    msg->size = offset;
> +}
> +
> +/* Same as nls_msg_end_nested() when the nested Netlink contains non empty
> + * message. Otherwise, drop the nested message header from 'msg'.
> + *
> + * Return true if the nested message has been dropped.  */
> +bool
> nl_msg_end_non_empty_nested(struct ofpbuf *msg, size_t offset)
> {
>     nl_msg_end_nested(msg, offset);
> 
>     struct nlattr *attr = ofpbuf_at_assert(msg, offset, sizeof *attr);
>     if (!nl_attr_get_size(attr)) {
> -        msg->size = offset;
> +        nl_msg_cancel_nested(msg, offset);
> +        return true;
> +    } else {
> +        return false;
>     }
> }
> 
> diff --git a/lib/netlink.h b/lib/netlink.h
> index 7646f91..bb4dbf6 100644
> --- a/lib/netlink.h
> +++ b/lib/netlink.h
> @@ -79,7 +79,8 @@ void nl_msg_put_string(struct ofpbuf *, uint16_t type, const char *value);
> 
> size_t nl_msg_start_nested(struct ofpbuf *, uint16_t type);
> void nl_msg_end_nested(struct ofpbuf *, size_t offset);
> -void nl_msg_end_non_empty_nested(struct ofpbuf *, size_t offset);
> +void nl_msg_cancel_nested(struct ofpbuf *, size_t offset);
> +bool nl_msg_end_non_empty_nested(struct ofpbuf *, size_t offset);
> void nl_msg_put_nested(struct ofpbuf *, uint16_t type,
>                        const void *data, size_t size);
> 
> -- 
> 1.8.3.1
> 
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
diff mbox

Patch

diff --git a/lib/netlink.c b/lib/netlink.c
index ad7d35a..ae4c72a 100644
--- a/lib/netlink.c
+++ b/lib/netlink.c
@@ -467,16 +467,29 @@  nl_msg_end_nested(struct ofpbuf *msg, size_t offset)
     attr->nla_len = msg->size - offset;
 }
 
-/* Same as nls_msg_end_nested() when the nested Netlink contains non empty
- * message. Otherwise, drop the nested message header from 'msg'.    */
+/* Cancel a nested Netlink attribute in 'msg'.  'offset' should be the value
+ * returned by nl_msg_start_nested(). */
 void
+nl_msg_cancel_nested(struct ofpbuf *msg, size_t offset)
+{
+    msg->size = offset;
+}
+
+/* Same as nls_msg_end_nested() when the nested Netlink contains non empty
+ * message. Otherwise, drop the nested message header from 'msg'.
+ *
+ * Return true if the nested message has been dropped.  */
+bool
 nl_msg_end_non_empty_nested(struct ofpbuf *msg, size_t offset)
 {
     nl_msg_end_nested(msg, offset);
 
     struct nlattr *attr = ofpbuf_at_assert(msg, offset, sizeof *attr);
     if (!nl_attr_get_size(attr)) {
-        msg->size = offset;
+        nl_msg_cancel_nested(msg, offset);
+        return true;
+    } else {
+        return false;
     }
 }
 
diff --git a/lib/netlink.h b/lib/netlink.h
index 7646f91..bb4dbf6 100644
--- a/lib/netlink.h
+++ b/lib/netlink.h
@@ -79,7 +79,8 @@  void nl_msg_put_string(struct ofpbuf *, uint16_t type, const char *value);
 
 size_t nl_msg_start_nested(struct ofpbuf *, uint16_t type);
 void nl_msg_end_nested(struct ofpbuf *, size_t offset);
-void nl_msg_end_non_empty_nested(struct ofpbuf *, size_t offset);
+void nl_msg_cancel_nested(struct ofpbuf *, size_t offset);
+bool nl_msg_end_non_empty_nested(struct ofpbuf *, size_t offset);
 void nl_msg_put_nested(struct ofpbuf *, uint16_t type,
                        const void *data, size_t size);