diff --git a/backend/nfqueue/nfqueue b/backend/nfqueue/nfqueue index a592665..acab917 100755 Binary files a/backend/nfqueue/nfqueue and b/backend/nfqueue/nfqueue differ diff --git a/backend/nfqueue/nfqueue.cpp b/backend/nfqueue/nfqueue.cpp index 0e9819d..7f66687 100644 --- a/backend/nfqueue/nfqueue.cpp +++ b/backend/nfqueue/nfqueue.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include typedef jpcre2::select jp; @@ -273,11 +274,6 @@ bool is_sudo(){ return getuid() == 0; } - -bool callb(const uint8_t *data, uint32_t len){ - return true; -} - void config_updater (){ string line, data; while (true){ @@ -303,15 +299,16 @@ void config_updater (){ template class NFQueueSequence{ private: - vector<* NetfilterQueue> *nfq = nullptr; + vector *> nfq; uint16_t _init; uint16_t _end; + vector threads; public: - static const QUEUE_BASE_NUM = 1000; + static const int QUEUE_BASE_NUM = 1000; NFQueueSequence(uint16_t seq_len){ if (seq_len <= 0) throw invalid_argument("seq_len <= 0"); - nfq = new vector<* NetfilterQueue>(seq_len); + nfq = vector*>(seq_len); _init = QUEUE_BASE_NUM; while(nfq[0] == NULL){ if (_init+seq_len-1 >= 65536){ @@ -332,38 +329,41 @@ class NFQueueSequence{ } _end = _init + seq_len - 1; } - - uint16_t init() return _init; - uint16_t end() return _end; - ~NFQueueSequence(){ - - } -}; - -template -nf_queue_seq* create_queue_seq() { - var queue_list = make([]*netfilter.NFQueue, num) - var err error - starts := QUEUE_BASE_NUM - for queue_list[0] == nil { - if starts+num-1 >= 65536 { - log.Fatalf("Netfilter queue is full!") - } - for i := 0; i < len(queue_list); i++ { - queue_list[i], err = netfilter.NewNFQueue(uint16(starts+num-1-i), MAX_PACKET_IN_QUEUE, netfilter.NF_DEFAULT_PACKET_SIZE) - if err != nil { - for j := 0; j < i; j++ { - queue_list[j].Close() - queue_list[j] = nil - } - starts = starts + num - i - break + void start(){ + if (threads.size() != 0) throw runtime_error("NFQueueSequence: already started!"); + for (int i=0;i::run, nfq[i])); } } - } - return queue_list, starts, starts + num - 1 + void join(){ + for (int i=0;i nfq_input(1); + NetfilterQueue nfq_output(1000); + cout << "RUN INPUT" << endl; + nfq_input.start(); + cout << "RUN OUTPUT" << endl; + nfq_output.run(); //Only in mnl_cb_run is checked is a nfqueue can be binded + /* int n_of_queue = 1; if (argc >= 2) n_of_queue = atoi(argv[1]); - - + NFQueueSequence input_queues(n_of_queue); + input_queues.start(); + 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; config_updater(); + */ } /* +libpcre2-dev +libnetfilter-queue-dev +libtins-dev +libmnl-dev + +c++ nfqueue.cpp -o nfqueue -pthread -lpcre2-8 -ltins -lnetfilter_queue -lmnl + WORKDIR /tmp/ RUN git clone --branch release https://github.com/jpcre2/jpcre2 WORKDIR /tmp/jpcre2