Convert static function __build_send_cfg_msg() to use libmnl. This by itself converts the 3 public functions. Signed-off-by: Duncan Roe <duncan_roe@xxxxxxxxxxxxxxx> --- src/libnetfilter_queue.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/libnetfilter_queue.c b/src/libnetfilter_queue.c index db31446..1ef6fb8 100644 --- a/src/libnetfilter_queue.c +++ b/src/libnetfilter_queue.c @@ -227,27 +227,33 @@ static struct nfq_q_handle *find_qh(struct nfq_handle *h, uint16_t id) return NULL; } +static int nfq_query(struct nfq_handle *h, struct nlmsghdr *nlh, char *buf, + size_t bufsiz) +{ + int ret; + + ret = mnl_socket_sendto(h->nl, nlh, nlh->nlmsg_len); + if (ret != -1) + ret = mnl_socket_recvfrom(h->nl, buf, bufsiz); + if (ret != -1) + ret = mnl_cb_run(buf, ret, 0, mnl_socket_get_portid(h->nl), + NULL, NULL); + return ret; +} + /* build a NFQNL_MSG_CONFIG message */ static int __build_send_cfg_msg(struct nfq_handle *h, uint8_t command, uint16_t queuenum, uint16_t pf) { - union { - char buf[NFNL_HEADER_LEN - +NFA_LENGTH(sizeof(struct nfqnl_msg_config_cmd))]; - struct nlmsghdr nmh; - } u; - struct nfqnl_msg_config_cmd cmd; + char buf[MNL_SOCKET_BUFFER_SIZE]; + struct nlmsghdr *nlh; - nfnl_fill_hdr(h->nfnlssh, &u.nmh, 0, AF_UNSPEC, queuenum, - NFQNL_MSG_CONFIG, NLM_F_REQUEST|NLM_F_ACK); + nlh = nfq_nlmsg_put2(buf, NFQNL_MSG_CONFIG, queuenum, NLM_F_ACK); - cmd._pad = 0; - cmd.command = command; - cmd.pf = htons(pf); - nfnl_addattr_l(&u.nmh, sizeof(u), NFQA_CFG_CMD, &cmd, sizeof(cmd)); + nfq_nlmsg_cfg_put_cmd(nlh, AF_UNSPEC, command); - return nfnl_query(h->nfnlh, &u.nmh); + return nfq_query(h, nlh, buf, sizeof(buf)); } static int __nfq_rcv_pkt(struct nlmsghdr *nlh, struct nfattr *nfa[], -- 2.35.8