diff options
author | /C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org </C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org> | 2005-07-27 19:21:54 +0000 |
---|---|---|
committer | /C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org </C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org> | 2005-07-27 19:21:54 +0000 |
commit | a8e6e8ae4ba2fdd6afb640623f140c102a70a3e4 (patch) | |
tree | 816fcc5c284939c66a289205efb271ab9d65364f /libnfnetlink.c | |
parent | 7f46446e093c9ca10db39b8d3845725ead99bb74 (diff) |
add nfnl_parse_hdr() function
Diffstat (limited to 'libnfnetlink.c')
-rw-r--r-- | libnfnetlink.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/libnfnetlink.c b/libnfnetlink.c index f0997fd..80cb0c4 100644 --- a/libnfnetlink.c +++ b/libnfnetlink.c @@ -186,6 +186,25 @@ void nfnl_fill_hdr(struct nfnl_handle *nfnlh, nfg->res_id = htons(res_id); } +struct nfattr * +nfnl_parse_hdr(struct nfnl_handle *nfnlh, const struct nlmsghdr *nlh, + struct nfgenmsg **genmsg) +{ + if (nlh->nlmsg_len < NLMSG_LENGTH(sizeof(struct nfgenmsg))) + return NULL; + + if (nlh->nlmsg_len == NLMSG_LENGTH(sizeof(struct nfgenmsg))) { + if (genmsg) + *genmsg = (struct nfgenmsg *)((void *)nlh+sizeof(nlh)); + return NULL; + } + + if (genmsg) + *genmsg = (struct nfgenmsg *)((void *)nlh + sizeof(nlh)); + + return ((void *)nlh + NLMSG_LENGTH(sizeof(struct nfgenmsg))); +} + /** * nfnl_listen: listen for one or more netlink messages * |