From bbe1f68ded15a3579d26d8c3f23e9c3941296193 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Mon, 22 Nov 2010 21:51:48 +0100 Subject: attr: add mnl_attr_nest_cancel() This patch adds mnl_attr_nest_cancel() that allows to cancel the current nest that we are building. Signed-off-by: Pablo Neira Ayuso --- include/libmnl/libmnl.h | 1 + src/attr.c | 13 +++++++++++++ src/libmnl.map | 1 + 3 files changed, 15 insertions(+) diff --git a/include/libmnl/libmnl.h b/include/libmnl/libmnl.h index 0b581d4..dc4d3dd 100644 --- a/include/libmnl/libmnl.h +++ b/include/libmnl/libmnl.h @@ -96,6 +96,7 @@ extern void mnl_attr_put_strz(struct nlmsghdr *nlh, uint16_t type, const char *d /* TLV attribute nesting */ extern struct nlattr *mnl_attr_nest_start(struct nlmsghdr *nlh, uint16_t type); extern void mnl_attr_nest_end(struct nlmsghdr *nlh, struct nlattr *start); +extern void mnl_attr_nest_cancel(struct nlmsghdr *nlh, struct nlattr *start); /* TLV validation */ extern int mnl_attr_type_valid(const struct nlattr *attr, uint16_t maxtype); diff --git a/src/attr.c b/src/attr.c index 7357f43..16f390a 100644 --- a/src/attr.c +++ b/src/attr.c @@ -503,6 +503,19 @@ mnl_attr_nest_end(struct nlmsghdr *nlh, struct nlattr *start) start->nla_len = mnl_nlmsg_get_payload_tail(nlh) - (void *)start; } +/** + * mnl_attr_nest_cancel - cancel an attribute nest + * \param nlh pointer to the netlink message + * \param start pointer to the attribute nest returned by mnl_attr_nest_start() + * + * This function updates the attribute header that identifies the nest. + */ +EXPORT_SYMBOL void +mnl_attr_nest_cancel(struct nlmsghdr *nlh, struct nlattr *start) +{ + nlh->nlmsg_len -= mnl_nlmsg_get_payload_tail(nlh) - (void *)start; +} + /** * @} */ diff --git a/src/libmnl.map b/src/libmnl.map index efa2da1..4bbd06e 100644 --- a/src/libmnl.map +++ b/src/libmnl.map @@ -11,6 +11,7 @@ global: mnl_attr_get_u8; mnl_attr_nest_end; mnl_attr_nest_start; + mnl_attr_nest_cancel; mnl_attr_next; mnl_attr_ok; mnl_attr_parse; -- cgit v1.2.3