Сегодняшний выпуск посвящен команде ndd(1M), позволяющей
изменять параметры драйверов устройств для стека протоколов TCP/IP,
например, ip_forwarding. Перевод сделан 13 ноября по
справочному руководству Solaris 8.
Команда ndd позволяет получить и установить некоторые параметры конфигурации
для некоторых драйверов ядра. Сейчас ndd поддерживает только драйверы,
реализующие семейство протоколов Internet TCP/IP. Каждый драйвер сам решает,
какие параметры можно получить с помощью ndd. Поскольку параметры
обычно тесно связаны с реализацией, они могут меняться в новых версиях.
Некоторые параметры могут быть доступны только для чтения.
Если опция -set не указана, ndd запрашивает указанный драйвер,
извлекает значение указанного параметра и выдает его в стандартных выходной
поток. Если указана опция -set, команда ndd передает значение,
которое в этом случае должно быть указано, соответствующему драйверу,
который присваивает его заданному параметру.
По соглашению, драйверы, поддерживающие ndd, поддерживают также
специальный доступный только для чтения параметр "?", значение которого -
список параметров, поддерживаемых драйвером.
Пример 1: Получение параметров, поддерживаемых драйвером TCP
Чтобы узнать, какие параметры поддерживаются драйвером TCP, выполните следующую
команду:
example% ndd /dev/tcp \?
Параметр "?" может потребоваться замаскировать обратной косой, чтобы он не
интерпретировался как метасимвол командного интерпретатора.
Следующая команда устанавливает параметру ip_forwarding драйвера двойного
стека IP значение 0. Это отключает пересылку пакетов IPv4 с одного интерфейса на
другой.
example% ndd -set /dev/ip ip_forwarding 0
Аналогично, чтобы отключить перенаправление пакетов IPv6 надо сбросить в 0
значение параметра ip6_forwarding
example% ndd -set /dev/ip ip6_forwarding 0
Для получения текущей таблицы перенаправлений IPv4 используется следующая
команда:
example% ndd /dev/ip ipv4_ire_status
Для получения текущей таблицы перенаправлений IPv6 используется следующая
команда:
Поддерживаемые каждым дравером параметры могут меняться от версии к версии.
Как и программы, читающие /dev/kmem, пользовательские программы или сценарии
командного интерпретатора, выполняющие команду ndd, должны быть готовы
к изменению имен параметров.
Команда ioctl(), которую ndd использует для взаимодействия с
драйверами, вполне вероятно, изменится в следующей версии. Следует избегать
зависимостей от нее в пользовательских программах.
Смысл многих параметров ndd понятен, только если вы представляете себе,
как реализован драйвер.