Вопрос по архитектуре FreeBSD

badik56

Интересует следующее. Как построен доступ к сетевухе? То есть для того, чтобы пакет отправить, нужно ли переходить из режима user в режим kernel.

frant5

>для того, чтобы пакет отправить, нужно ли переходить из режима user в режим kernel.
да

badik56

спасибо. А может ты еще про Berkley Packet Filter что-нибудь мне подскажешь? Ну типа ссылку на литературу хорошую: чтобы не много читать было и в то же время чтобы достаточно глубоко это описывалось.

Asgard

man bpf

sergey_m

Вопрос поставлен не совсем корректно. У userland есть доступ к сетевому стеку. С помощью интерфейса socket ты можешь посылать данные в сеть из userland приложения. Через какой сетевой интерфейс пойдут данные и пойдут ли вообще решает ядро. Поэтому это нельзя назвать доступом к сетевухе.
Другие возможности есть у rootа. Это raw sockets и bpf. К сожалению первый вариант не даёт доступа к физическому уровню. То есть ты можешь посылать самодельные IP датаграммы, но не Ethernet кадры. bpf даёт такую возможность. К сожалению его использование в userland не покрыто документацией bpf(4 bpf(9). Можешь в качестве примера почитать исходники dhclient: src/contrib/isc-dhcp.
Есть еще альтернативный способ: netgraph. Я бы именно его и использовал, но для человека незнакомого вполне может быть окажется проще понять bpf, чем netgraph.
P.S. "переходить из режима user в режим kernel" тоже не корректно звучит.
Оставить комментарий
Имя или ник:
Комментарий: