netfilter_queue: использовать --queue-balance в многопоточной среде - PullRequest
1 голос
/ 02 марта 2012

Я использую libnetfilter_queue для модификации пользовательского пространства входящих / исходящих пакетов.Я использовал однопоточную модель.Но я обнаружил, что из ядра 2.6.31 возможно иметь разные очереди для разных соединений.поэтому я бродил, можно ли управлять каждой очередью в разных потоках.

обычно я настраиваю обработку очереди, как показано ниже:

struct nfq_handle * h = nfq_open();
nfq_unbind_pf(h, AF_NET);
nfq_bind_pf(h,m AF_NET);
struct nfq_q_handle(h, 0, &cb, NULL);
nfq_set_mode(qh, NFQNL_COPY_PACKET, 0xffff);

сейчас, если я хочу управлять как 100 очередями,я упакую h, qh и que_num в структуру и зациклю ее для инициализации.

Теперь мой вопрос:

, если я инициализирую выше в основном потоке и хочу запустить обратные вызовыотдельные потоки, достаточно ли запустить четный цикл в функции, которая будет передана pthread_create ()?Будет ли он выполнять обратные вызовы в потоках?

Я не уверен, но, насколько мне известно, пакет извлекается из очередей, когда возвращается nfq_set_verdict.так что мне нужно запустить nfq_set_verdict в отдельных потоках, так что я пакеты могут быть извлечены из очередей параллельно.

РЕДАКТИРОВАТЬ: я предоставляю свой код, если кто-то нуждается в них, чтобы понять мою проблему.вставка всех кодов здесь кажется необоснованной, поскольку это создает визуальный шум.

1 Ответ

2 голосов
/ 16 декабря 2015

Я знаю, что это немного некропостинга, но в случае, если кто-то наткнется на эту проблему.

Если вы используете --queue-balance для многопоточности, а netfilter, кажется, помещает все пакеты в одну очередь, нужноadd --queue-cpu-fanout, который заставляет iptables обмениваться пакетами на основе cpuid вместо потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...