http://nuclight.livejournal.com/ ([identity profile] nuclight.livejournal.com) wrote in [personal profile] nuclight 2011-03-08 07:10 pm (UTC)

Re: ng_nat и установка режима через setmode

> Если можно вопрос: как правильно устанавливать параметр setmode mask= ? Я прочитал в мане про libalias, что оно ожидает от нас флаги и маску которая указывает какие конкретно биты надо менять (?). Я вот не программист и мне как-то сложновато сходу понять в чем соль :)

Маска применяется к флагам как побитовое AND (т.е. логическое И на каждый бит). В исходниках там такая строчка:
la->packetAliasMode = (flags & mask) | (la->packetAliasMode & ~mask);
(для незнающих Си: & есть AND, | есть OR, ~ есть NOT).

Как правило, это означает, что если все флаги, которые передаются туда, надо включить - то маске можно просто присвоить такое же значение как и самим flags. Если какой-нибудь флаг надо отключить - в маску пишется значение, как если бы он наоборот включался, а вот в сами флаги он не приплюсовывается (ноль).

> У вас при начальном конфигурировании экземпляра ng_nat он установлен в mask=0.

В моем скрипте ошибка, спасибо за указание. Исправил.

> А если я теперь хочу на лету выключить логирование то какое значение маски применять?

Поскольку для log=1, то:
ngctl msg nat: setmode { flags=0 mask=1 }

> Может достаточно просто указать новое значение при нулевой маске чтобы ng_nat заместил все старые биты им:
> ngctl msg nat: setmode { flags=54 mask=0 }
> Или надо все же указать еще и маску 4294967294 (11111111 11111111 11111111 11111110)

Нет, при нулевой маске он не изменит ничего. Все "старые биты заместятся новым значением" при максимальной маске, 0xffffffff.

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting