Use a buffer of MNL_SOCKET_BUFFER_SIZE; no union required. Signed-off-by: Duncan Roe <duncan_roe@xxxxxxxxxxxxxxx> --- src/libnetfilter_queue.c | 33 +++++++++++---------------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/src/libnetfilter_queue.c b/src/libnetfilter_queue.c index 1ef6fb8..28aa771 100644 --- a/src/libnetfilter_queue.c +++ b/src/libnetfilter_queue.c @@ -831,23 +831,18 @@ int nfq_set_mode(struct nfq_q_handle *qh, uint8_t mode, uint32_t range) EXPORT_SYMBOL int nfq_set_queue_flags(struct nfq_q_handle *qh, uint32_t mask, uint32_t flags) { - union { - char buf[NFNL_HEADER_LEN - +NFA_LENGTH(sizeof(mask) - +NFA_LENGTH(sizeof(flags)))]; - struct nlmsghdr nmh; - } u; + char buf[MNL_SOCKET_BUFFER_SIZE]; + struct nlmsghdr *nlh; mask = htonl(mask); flags = htonl(flags); - nfnl_fill_hdr(qh->h->nfnlssh, &u.nmh, 0, AF_UNSPEC, qh->id, - NFQNL_MSG_CONFIG, NLM_F_REQUEST|NLM_F_ACK); + nlh = nfq_nlmsg_put2(buf, NFQNL_MSG_CONFIG, qh->id, NLM_F_ACK); - nfnl_addattr32(&u.nmh, sizeof(u), NFQA_CFG_FLAGS, flags); - nfnl_addattr32(&u.nmh, sizeof(u), NFQA_CFG_MASK, mask); + mnl_attr_put_u32(nlh, NFQA_CFG_FLAGS, flags); + mnl_attr_put_u32(nlh, NFQA_CFG_MASK, mask); - return nfnl_query(qh->h->nfnlh, &u.nmh); + return nfq_query(qh->h, nlh, buf, sizeof(buf)); } /** @@ -864,20 +859,14 @@ int nfq_set_queue_flags(struct nfq_q_handle *qh, uint32_t mask, uint32_t flags) EXPORT_SYMBOL int nfq_set_queue_maxlen(struct nfq_q_handle *qh, uint32_t queuelen) { - union { - char buf[NFNL_HEADER_LEN - +NFA_LENGTH(sizeof(struct nfqnl_msg_config_params))]; - struct nlmsghdr nmh; - } u; - uint32_t queue_maxlen = htonl(queuelen); + char buf[MNL_SOCKET_BUFFER_SIZE]; + struct nlmsghdr *nlh; - nfnl_fill_hdr(qh->h->nfnlssh, &u.nmh, 0, AF_UNSPEC, qh->id, - NFQNL_MSG_CONFIG, NLM_F_REQUEST|NLM_F_ACK); + nlh = nfq_nlmsg_put2(buf, NFQNL_MSG_CONFIG, qh->id, NLM_F_ACK); - nfnl_addattr_l(&u.nmh, sizeof(u), NFQA_CFG_QUEUE_MAXLEN, &queue_maxlen, - sizeof(queue_maxlen)); + mnl_attr_put_u32(nlh, NFQA_CFG_QUEUE_MAXLEN, htonl(queuelen)); - return nfnl_query(qh->h->nfnlh, &u.nmh); + return nfq_query(qh->h, nlh, buf, sizeof(buf)); } /** -- 2.35.8