Добрый день всем!
Делаю сейчас железку на MPC8321 266MHz DDR2, linux 3.7.6, частью которой является реализация RedBox'а. Есть 3 сетевых интерфейса ETH0, ETH1, ETH2. Простыми словами, нужно грабить все пакеты из одного, немного их модифицировать, и посылать в 2 других, и наоборот. Сейчас сделал все, используя libpcap в userspace. Все работает, но скорость 30 МБит/c. Все максимально оптимизировал, но больше получить так и не смог (железка еще занимается синхронизацией IEEE1588v2, по одному интерфейсу еще реализован RSTP). Как вижу единственный путь - перенести все сетевые дела в kernel, дабы избежать лишнего копирования из kernel в userspace и обратно. С сетевыми драйверами знаком немного (прочитал пару книжек, но ни разу не писал еще ничего реального), с символьным знаком хорошо, было пару проектов, включая этот.
Плиз, посоветуйте оптимальный путь, может есть что нибудь, что можно взять за основу (самый лучший вариант). Как мне видеться, нужен механизм, чтобы спрятать реальные физические интерфейсы от системы, создать виртуальные, на которые будет перенаправлен их вывод с небольшой модификацией пакетов ес-но.