> Если можно вопрос: как правильно устанавливать параметр 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.
Re: ng_nat и установка режима через setmode
Маска применяется к флагам как побитовое 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.