summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorDaniel Wagner <daniel.wagner@bmw-carit.de>2013-06-19 17:03:12 +0200
committerPatrik Flykt <patrik.flykt@linux.intel.com>2013-06-20 10:46:41 +0300
commit462d3684211a19f85f546542ce231a8aefd03f48 (patch)
tree6df7e89bd5967d998feaff898e1cc2b0409b5048 /tools
parent333f863b64c7953480d72a761a3dc326a324631a (diff)
downloadconnman-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.c58
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);
}