LINUX.ORG.RU

Создание «моста» между сетевыми интерфейсами


0

0

Добрый день! Подскажите, пож-ста, как решить следующую задачу. Есть интерфейс eth1 - реальный физический интерфейс. Есть мой драйвер, который создает ifconfig-ом два устройства myeth0 и myeth1.

Мне нужно, чтобы Линукс работал с myeth0 и myeth1, а в физическую линию данные отправлялись/принимались бы через eth1.


Как я думаю - можно написать пользовательское приложение net_bridge, с использованием сокетов PF_PACKET (SOCK_RAW) - привязать сокеты к интерфейсам, читать данные recvfrom из myeth0 и myeth1 - и пакеты с типом PACKET_OUTGOING отправлять (sendto) в сокет eth1. И наоборот.

Но тут возникла проблема: в сторону eth1 этот механизм работает, пакеты в физическую линию уходят. А вот в обратную сторону, при получении пакета из eth1, предназначенного, например, для myeth0 - как передать его ядру, чтобы оно его обработало?

Если я пишу sendto(sock_myeth0..), то получает его не ядро, а обработчик hard_start_xmit драйвера myeth.

Как нужно отправить пакет, чтобы его получило ядро???

Reks
() автор топика
Ответ на: комментарий от Reks

Хотя, может Вы подскажете лучший способ реализации этого "моста".

Reks
() автор топика
Ответ на: комментарий от dilmah

Насколько я понял, brctl позволяет связать два физических интерфейса в один, т.е. brctl addbr br brctl addif br eth0 brctl addif br eth1 И потом уже можно работать с br, как с интерфесом.

У меня же другая проблема, мне наоборото нужно из eth1 "сделать" два интерфейса. Тут разве br может помочь?

Может быть, нужно использовать TUN/TAP?

Reks
() автор топика
Ответ на: комментарий от Reks

когда я написал про "фичи", я имел в виду то, что например в нетбсд ты можешь продолжать пользоваться eth0/eth1, в линуксе нет. Есть такая штука veth -- можно канал сделать от myeth0 к myeth0_, канал от myeth1 к myeth1_, и в бридж воткнуть myeth0_, myeth1_ и eth0. Тогда ты сможешь продолжать пользоваться myeth0 и myeth1, но они физически будут связаны с eth0. Типа как-то так:)

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

А в линуксе есть такое понятие, как "виртуальный интерфейс"?

Можно было бы тогда создать две их пары, соединить попарно и по каждой из пары добавить в бридж, туда же и eth1.

Reks
() автор топика
Ответ на: комментарий от Reks

нашел - veth входит в OpenVZ. А ее установить не получится - т.к. у меня uClinux for arm, а там в ядро надо изменения всякие вносить.

что-то другое надо придумывать :(

А все-таки как можно еще сделать, чтобы myeth0 и myeth1, после включения в мост, можно было использовать?

Reks
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.