2016-11-24 22 views
0

Я ищу помощь и рекомендации для сетевого проекта, в котором я работаю в последнее время. Для этого требуется, чтобы компьютер Linux был пассивным сетевым устройством.Кадры Ethernet от NIC

Сетевые пакеты поступают из одного сетевого интерфейса и выходят из другого интерфейса (net - eth0 -> Linux PC - eth1 -> net) без внесения каких-либо изменений в данные.

Приложение, которое будет запущено в системе Linux, изменит только порядок пакетов. Это будет «глупое» приложение для сетевого эмулятора.

Первая реализация была выполнена с использованием RAW-сокетов, где read() вызывается каждый раз, когда пакет поступает в пользовательское пространство, а write() вызывается, когда пакет Ethernet должен быть отправлен в сетевой адаптер.

Я хотел бы знать, есть ли более практичный и прямой путь, чем RAW-сокеты, минуя сетевой стек Linux.

+0

вы не можете обойти сетевой стек Linux, и они, как вы делаете это, вероятно, самый простой способ. Что вы подразумеваете под практическим? –

+0

Практический путь идет к технической части реализации. Для реализации сокетов требуется механизм tx-rx с неблокирующим IO, это как я реализовал на первом месте, используя select() и pthreads под C. Есть ли лучшая философия дизайна? Также я ищу способ, которым промежуточная система не будет обрабатывать весь этот сетевой трафик. Между этими двумя интерфейсами должно выполняться только приложение эмуляции. – cyberrobot

+0

Что вы можете сделать, так это создать «netfilter» hook и получить его пакеты, а затем отправить их немедленно. Таким образом, вашим пакетам не придется перемещаться в пользовательское пространство, и вы можете выполнять обработку в пространстве ядра, которое выполняется быстрее. –

ответ

0

Если вы хотите обходить ядро, DPDK в Linux и NetMap во FreeBSD - это варианты, которые нужно сделать именно так.

0

Действительно, это можно сделать в dpdk в Linux. В папке примеров дерева dpdk есть примеры файлов l3fw и l2fwd, которые могут вас вдохновить. Также рассмотрите возможность использования vpp, проекта fd.io, размещенного в Linux Foundation, который может использовать dpdk.

Рами Розен

 Смежные вопросы

  • Нет связанных вопросов^_^