nlmsg_parse.c

00001 #include <netlink/msg.h>
00002 #include <netlink/attr.h>
00003 
00004 enum {
00005         MY_ATTR_FOO = 1,
00006         MY_ATTR_BAR,
00007         __MY_ATTR_MAX,
00008 };
00009 
00010 #define MY_ATTR_MAX (__MY_ATTR_MAX - 1)
00011 
00012 static struct nla_policy my_policy[MY_ATTR_MAX+1] = {
00013         [MY_ATTR_FOO] = { .type = NLA_U32 },
00014         [MY_ATTR_BAR] = { .type = NLA_STRING,
00015                           .maxlen = 16 },
00016 };
00017 
00018 void parse_msg(struct nlmsghdr *nlh)
00019 {
00020         struct nlattr *attrs[MY_ATTR_MAX+1];
00021 
00022         if (nlmsg_parse(nlh, 0, attrs, MY_ATTR_MAX, my_policy) < 0)
00023                 /* error */
00024 
00025         if (attrs[MY_ATTR_FOO]) {
00026                 /* MY_ATTR_FOO is present in message */
00027                 printf("value: %u\n", nla_get_u32(attrs[MY_ATTR_FOO]));
00028         }
00029 }