00001 int parse_message(struct nlmsghdr *hdr)
00002 {
00003
00004
00005
00006
00007 struct nla_policy attr_policy[] = {
00008 [ATTR_FOO] = { .type = NLA_U32 },
00009 [ATTR_BAR] = { .type = NLA_NESTED },
00010 };
00011 struct nlattr *attrs[ATTR_MAX+1];
00012 int err;
00013
00014
00015
00016
00017
00018
00019
00020 if ((err = nlmsg_parse(hdr, sizeof(struct my_hdr), attrs, ATTR_MAX,
00021 attr_policy)) < 0)
00022 goto errout;
00023
00024 if (attrs[ATTR_FOO]) {
00025
00026
00027
00028
00029 uint32_t foo = nla_get_u32(attrs[ATTR_FOO]);
00030 }
00031
00032 if (attrs[ATTR_BAR]) {
00033 struct *nested[NESTED_MAX+1];
00034
00035
00036
00037
00038
00039 err = nla_parse_nested(nested, NESTED_MAX, attrs[ATTR_BAR],
00040 nested_policy);
00041 if (err < 0)
00042 goto errout;
00043
00044
00045 }
00046
00047 err = 0;
00048 errout:
00049 return err;
00050 }