diff options
author | Daniel Wagner <daniel.wagner@bmw-carit.de> | 2013-06-19 17:03:12 +0200 |
---|---|---|
committer | Patrik Flykt <patrik.flykt@linux.intel.com> | 2013-06-20 10:46:41 +0300 |
commit | 462d3684211a19f85f546542ce231a8aefd03f48 (patch) | |
tree | 6df7e89bd5967d998feaff898e1cc2b0409b5048 /tools | |
parent | 333f863b64c7953480d72a761a3dc326a324631a (diff) | |
download | connman-462d3684211a19f85f546542ce231a8aefd03f48.tar.gz |
netlink-test: Use open coded message creation instead of struct
struct nfacctmsg did not adhere to the alignment requirements and
was broken for 32bit machines.
Diffstat (limited to 'tools')
-rw-r--r-- | tools/netlink-test.c | 58 |
1 files changed, 28 insertions, 30 deletions
diff --git a/tools/netlink-test.c b/tools/netlink-test.c index dfde6ed5..ca731cde 100644 --- a/tools/netlink-test.c +++ b/tools/netlink-test.c @@ -177,72 +177,70 @@ static void append_attr_str(struct nlattr *attr, dst[size - 1] = '\0'; } -struct nfacctmsg { - struct nfgenmsg hdr; - struct nlattr attr; - unsigned char *buf[]; -}; - static void test_nfacct_new(struct netlink_info *netlink, const char *name) { - struct nfacctmsg *msg; + struct nfgenmsg *hdr; size_t len, name_len; name_len = strlen(name) + 1; - len = sizeof(msg) + name_len; + len = NLMSG_ALIGN(sizeof(struct nfgenmsg)) + + NLA_ALIGN(sizeof(struct nlattr)) + + name_len; - msg = g_malloc0(len); + hdr = g_malloc0(len); - msg->hdr.nfgen_family = AF_UNSPEC; - msg->hdr.version = NFNETLINK_V0; - msg->hdr.res_id = 0; + hdr->nfgen_family = AF_UNSPEC; + hdr->version = NFNETLINK_V0; + hdr->res_id = 0; - append_attr_str(&msg->attr, NFACCT_NAME, name_len, name); + append_attr_str(NLA_DATA(hdr), NFACCT_NAME, name_len, name); netlink_send(netlink, NFNL_SUBSYS_ACCT << 8 | NFNL_MSG_ACCT_NEW, - NLM_F_CREATE | NLM_F_ACK, msg, len, + NLM_F_CREATE | NLM_F_ACK, hdr, len, test_nfacct_new_callback, NULL, NULL); - g_free(msg); + g_free(hdr); } static void test_nfacct_del(struct netlink_info *netlink, const char *name) { - struct nfacctmsg *msg; + struct nfgenmsg *hdr; size_t len, name_len; name_len = strlen(name) + 1; - len = sizeof(msg) + name_len; + len = NLMSG_ALIGN(sizeof(struct nfgenmsg)) + + NLA_ALIGN(sizeof(struct nlattr)) + + name_len; - msg = g_malloc0(len); + hdr = g_malloc0(len); - msg->hdr.nfgen_family = AF_UNSPEC; - msg->hdr.version = NFNETLINK_V0; - msg->hdr.res_id = 0; + hdr->nfgen_family = AF_UNSPEC; + hdr->version = NFNETLINK_V0; + hdr->res_id = 0; - append_attr_str(&msg->attr, NFACCT_NAME, name_len, name); + append_attr_str(NLA_DATA(hdr), NFACCT_NAME, name_len, name); netlink_send(netlink, NFNL_SUBSYS_ACCT << 8 | NFNL_MSG_ACCT_DEL, - NLM_F_ACK, msg, len, + NLM_F_ACK, hdr, len, test_nfacct_new_callback, NULL, NULL); - g_free(msg); + g_free(hdr); } static void test_nfacct_dump(struct netlink_info *netlink) { - struct nfgenmsg msg; + struct nfgenmsg hdr; - memset(&msg, 0, sizeof(msg)); - msg.nfgen_family = AF_UNSPEC; - msg.version = NFNETLINK_V0; - msg.res_id = 0; + memset(&hdr, 0, sizeof(hdr)); + hdr.nfgen_family = AF_UNSPEC; + hdr.version = NFNETLINK_V0; + hdr.res_id = 0; netlink_send(netlink, NFNL_SUBSYS_ACCT << 8 | NFNL_MSG_ACCT_GET, - NLM_F_DUMP , &msg, sizeof(msg), + NLM_F_DUMP , &hdr, sizeof(hdr), test_nfacct_dump_callback, NULL, NULL); } |