URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6223
[ Назад ]

Исходное сообщение
"FreeBSD PF DIOCRADDADDRS"

Отправлено dosm , 03-Мрт-07 20:22 
Дано: FreeBSD 6.2 c PF в качестве фаервола. В pf.conf есть таблица

table <test> persist

на все попытки сделать

ioctl(dev_pf, DIOCRADDADDRS, &io)

ioctl возвращает -1 а в errno пишет ENODEV - Operation not supported by device.

Беглый осмотр внутренностей pfctl ответа не дал, а после изучения spamd закралось смутное сомнение, что во FreeBSD действительно нельзя выполнить DIOCRADDADDRS из пользовательской программы.

Может кто сталкивался с этим ? Поиск в google ничего вразумительного не дал :(


Содержание

Сообщения в этом обсуждении
"FreeBSD PF DIOCRADDADDRS"
Отправлено Forth , 05-Мрт-07 09:48 
if (io->pfrio_esize != sizeof(struct pfr_addr)) {
                        error = ENODEV;
                        break;
                }
Уверены, что в структуре io, которую передаете, все правильно выставлено?


"FreeBSD PF DIOCRADDADDRS"
Отправлено dosm , 05-Мрт-07 11:12 
>if (io->pfrio_esize != sizeof(struct pfr_addr)) {
>            
>          
> error = ENODEV;
>            
>          
> break;
>            
>    }
>Уверены, что в структуре io, которую передаете, все правильно выставлено?

Да. Это, в исходниках pf_ioctl.c, я видел. Пробегался дебагером по своему коду
io->pfrio_esize == sizeof(addr);

Конечно есть вероятность того, что я чего-то не учёл :) , но в исходниках spamd это реализовано через

execvp("/sbin/pfctl", ....)

Вот и думаю. Оставить костыль в виде exec, или же копать дальше.



"FreeBSD PF DIOCRADDADDRS"
Отправлено Forth , 05-Мрт-07 11:32 
>execvp("/sbin/pfctl", ....)
>
>Вот и думаю. Оставить костыль в виде exec, или же копать дальше.
>
Ну, не такой уж и костыль, скорее unix way в действии. Да и на мой взгляд понадежней, ибо у утилит обычно флаги и параметры редко меняются, только дополняются новыми, а вот смена API, к примеру кодов ioctl происходит все-таки чаще от версии к версии.



"FreeBSD PF DIOCRADDADDRS"
Отправлено dosm , 05-Мрт-07 12:17 
>Ну, не такой уж и костыль, скорее unix way в действии. Да
>и на мой взгляд понадежней, ибо у утилит обычно флаги и
>параметры редко меняются, только дополняются новыми, а вот смена API, к
>примеру кодов ioctl происходит все-таки чаще от версии к версии.

Просто хотел обойтись без

if(!fork())
{
  execvp(...);
}

или создания нового thread-а, а просто послать сигнал из демона в /dev/pf :)