2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-31 06:15:47 +00:00

netlink: Add functions for handling nested attributes.

This commit is contained in:
Ben Pfaff
2010-05-20 15:57:56 -07:00
parent a35fbea5bb
commit 25eeae6a1e
2 changed files with 26 additions and 0 deletions

View File

@@ -770,6 +770,15 @@ nl_attr_get_string(const struct nlattr *nla)
return nl_attr_get(nla);
}
/* Initializes 'nested' to the payload of 'nla'. Doesn't initialize every
* field in 'nested', but enough to poke around with it in a read-only way. */
void
nl_attr_get_nested(const struct nlattr *nla, struct ofpbuf *nested)
{
nested->data = (void *) nl_attr_get(nla);
nested->size = nl_attr_get_size(nla);
}
/* Default minimum and maximum payload sizes for each type of attribute. */
static const size_t attr_len_range[][2] = {
[0 ... N_NL_ATTR_TYPES - 1] = { 0, SIZE_MAX },
@@ -881,6 +890,20 @@ nl_policy_parse(const struct ofpbuf *msg, size_t nla_offset,
}
return true;
}
/* Parses the Netlink attributes within 'nla'. 'policy[i]', for 0 <= i <
* n_attrs, specifies how the attribute with nla_type == i is parsed; a pointer
* to attribute i is stored in attrs[i]. Returns true if successful, false on
* failure. */
bool
nl_parse_nested(const struct nlattr *nla, const struct nl_policy policy[],
struct nlattr *attrs[], size_t n_attrs)
{
struct ofpbuf buf;
nl_attr_get_nested(nla, &buf);
return nl_policy_parse(&buf, 0, policy, attrs, n_attrs);
}
/* Miscellaneous. */