From d89d76b7b6cbf2823a23da6a0a44d276d5f1b515 Mon Sep 17 00:00:00 2001 From: DomySh Date: Sat, 16 Jul 2022 13:45:31 +0200 Subject: [PATCH] Minor changes --- backend/nfqueue/nfqueue | Bin 189880 -> 190440 bytes backend/nfqueue/nfqueue.cpp | 54 ++++++++++++++++++++++++------------ 2 files changed, 36 insertions(+), 18 deletions(-) diff --git a/backend/nfqueue/nfqueue b/backend/nfqueue/nfqueue index 81157eab2e8de4059d287f70c70fd4a5a7d8eb58..6076a63f5a5f1db0d16d69152081106bd9aca353 100755 GIT binary patch delta 41073 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 delta 40555 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 diff --git a/backend/nfqueue/nfqueue.cpp b/backend/nfqueue/nfqueue.cpp index 97e7876..7e15f32 100644 --- a/backend/nfqueue/nfqueue.cpp +++ b/backend/nfqueue/nfqueue.cpp @@ -121,33 +121,34 @@ class NetfilterQueue { if (nl == NULL) { throw runtime_error( "mnl_socket_open" );} - if (mnl_socket_bind(nl, 0, MNL_SOCKET_AUTOPID) < 0) { throw runtime_error( "mnl_socket_bind" );} + if (mnl_socket_bind(nl, 0, MNL_SOCKET_AUTOPID) < 0) { + mnl_socket_close(nl); + throw runtime_error( "mnl_socket_bind" ); + } portid = mnl_socket_get_portid(nl); buf = (char*) malloc(BUF_SIZE); - if (!buf) { throw runtime_error( "allocate receive buffer" ); } + if (!buf) { + mnl_socket_close(nl); + throw runtime_error( "allocate receive buffer" ); + } - nlh = nfq_nlmsg_put(buf, NFQNL_MSG_CONFIG, queue_num); - nfq_nlmsg_cfg_put_cmd(nlh, AF_INET, NFQNL_CFG_CMD_BIND); - if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0) { - free(buf); + if (send_config_cmd(NFQNL_CFG_CMD_BIND) < 0) { + _clear(); throw runtime_error( "mnl_socket_send" ); } //TESTING QUEUE: TODO find a legal system to test if the queue was binded successfully - nlh = nfq_nlmsg_put(buf, NFQNL_MSG_CONFIG, queue_num); - nfq_nlmsg_cfg_put_cmd(nlh, AF_INET, NFQNL_CFG_CMD_NONE); - if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0) { - free(buf); + if (send_config_cmd(NFQNL_CFG_CMD_NONE) < 0) { + _clear(); throw runtime_error( "mnl_socket_send" ); } - int ret = mnl_socket_recvfrom(nl, buf, BUF_SIZE); - if (ret == -1) { - free(buf); + if (recv_packet() == -1) { + _clear(); throw std::runtime_error( "mnl_socket_recvfrom" ); } if (buf[44] == 1){ - free(buf); + _clear(); throw std::invalid_argument( "queueid is already busy" ); } @@ -160,12 +161,14 @@ class NetfilterQueue { mnl_attr_put_u32(nlh, NFQA_CFG_MASK, htonl(NFQA_CFG_F_GSO)); if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0) { - free(buf); + _clear(); throw runtime_error( "mnl_socket_send" ); } } + + void run(){ /* * ENOBUFS is signalled to userspace when packets were lost @@ -176,7 +179,7 @@ class NetfilterQueue { mnl_socket_setsockopt(nl, NETLINK_NO_ENOBUFS, &ret, sizeof(int)); for (;;) { - ret = mnl_socket_recvfrom(nl, buf, BUF_SIZE); + ret = recv_packet(); if (ret == -1) { throw std::runtime_error( "mnl_socket_recvfrom" ); } @@ -189,13 +192,28 @@ class NetfilterQueue { } ~NetfilterQueue() { + send_config_cmd(NFQNL_CFG_CMD_UNBIND); + _clear(); + } + private: + + ssize_t send_config_cmd(nfqnl_msg_config_cmds cmd){ + struct nlmsghdr *nlh = nfq_nlmsg_put(buf, NFQNL_MSG_CONFIG, queue_num); + nfq_nlmsg_cfg_put_cmd(nlh, AF_INET, cmd); + return mnl_socket_sendto(nl, nlh, nlh->nlmsg_len); + } + + ssize_t recv_packet(){ + return mnl_socket_recvfrom(nl, buf, BUF_SIZE); + } + + void _clear(){ if (buf != NULL) { free(buf); buf = NULL; } mnl_socket_close(nl); } - private: static int queue_cb(const struct nlmsghdr *nlh, void *data) { @@ -391,7 +409,7 @@ int main(int argc, char *argv[]) NFQueueSequence output_queues(n_of_queue); output_queues.start(); - cout << "QUEUE INPUT " << input_queues.init() << " " << input_queues.end() << " OUTPUT " << output_queues.init() << " " << output_queues.end() << endl; + cout << "QUEUES INPUT " << input_queues.init() << " " << input_queues.end() << " OUTPUT " << output_queues.init() << " " << output_queues.end() << endl; config_updater(); }