Операционная система ЗОСРВ «Нейтрино» > Руководство разработчика > Основные принципы системной разработки > Разработка драйверов и драйверные библиотеки > Драйверные библиотеки > Библиотеки разработки сетевых драйверов (devnp-*) > API NIC > nic_parse_options()



nic_parse_options()

Функция парсинга строки параметров драйвера

Прототип:

#include <netdrvr/nicsupport.h>
int nic_parse_options( nic_config_t *cfg,
char *options );

Аргументы:

cfg
Указатель на члены структуры nic_config_t, которые обновляются строкой опций. В зависимости от содержимого строки опций эта функция обновляет различные члены структуры, на которую указывает аргумент cfg. Опции, которые распознаются этой функцией, воздействуют на структуру следующим образом:
ioport
Указанное значение сохраняется в следующем свободном элементе массива io_window_base (элемент с индексом, указанным в поле num_io_windows). Поле num_io_windows увеличивается.
irq
Указанное значение сохраняется в следующем свободном элементе массива irq (элемент с индексом, указанным в поле num_irqs). Поле num_irqs увеличивается.
dma
Указанное значение сохраняется в следующем свободном элементе массива dma_channel (элемент с индексом, указанным в поле num_dma_channels). Поле num_dma_channels увеличивается.
vid
Указанное значение сохраняется в поле vendor_id.
did
Указанное значение сохраняется в поле device_id.
pci
Указанное значение сохраняется в поле device_index.
mac
Указанная строка конвертируется в массив байтов и сохраняется в массив current_address.
lan
Указанное значение сохраняется в поле lan.
mtu
Указанное значение сохраняется в поле mtu.
mru
Указанное значение сохраняется в поле mru.
speed
Указанное значение сохраняется в поле media_rate.
duplex
Указанное значение сохраняется в поле duplex.
media
Указанное значение сохраняется в поле media.
promiscuous
Эта опция не требует аргумента. Если она указана, флаг NIC_FLAG_PROMISCUOUS устанавливается в поле flags.
nomulticast
Эта опция не требует аргумента. Если она указана, флаг NIC_FLAG_MULTICAST сбрасывается в поле flags.
connector
Указанное значение сохраняется в поле connector.
deviceindex
Указанное значение сохраняется в поле device_index.
phy
Указанное значение сохраняется в поле phy_addr.
memrange
Указанное значение сохраняется в следующем свободном элементе массива mem_window_base (элемент с индексом, указанным в поле num_mem_windows). Поле num_mem_windows увеличивается. Если был указан размер окна в дополнение к базе (значение базы, за которым следует двоеточие, а затем значение длины), обновляется элемент массива mem_window_size на соответствующем индексе.
iorange
Указанное значение сохраняется в следующем свободном элементе массива io_window_base (элемент с индексом, указанным в поле num_io_windows). Поле num_io_windows увеличивается. Если был указан размер окна в дополнение к базе (значение базы, за которым следует двоеточие, а затем значение длины), обновляется элемент массива io_window_size на соответствующем индексе.
verbose
Если указана без аргумента, поле verbose увеличивается. Если указана с аргументом, поле verbose устанавливается в указанное значение.
iftype
Указанное значение сохраняется в поле iftype.
uptype
Указанная строка копируется в массив uptype.
priority
Указанное значение сохраняется в поле priority.
options
Строка, которую необходимо распарсить.

Библиотека:

libnetdrvr

Описание:

Функция nic_parse_options() помогает при разборе строки опций драйвера для сети. Эта функция анализирует стандартизированные опции. Драйвера могут разбирать свои собственные специфические строки опций с помощью функции getsubopt(). Стандартизированные опции имеют четко определенное поведение, которое одинаково для всех сетевых драйверов.

Если функция getsubopt() не распознает опцию как специфичную для драйвера, то эта опция должна быть передана функции nic_parse_option(). Она попытается интерпретировать опцию; если это не удастся, структура nic_config_t будет обновлена соответствующим образом. Если драйвер использует функцию nic_parse_options() для разбора опций, структура nic_config_t сохраняет результаты.


Note: Драйвер обычно инициализирует поля структуры nic_config_t значениями по умолчанию до того, как начнется разбор опций. Это позволяет пользователю переопределить значения по умолчанию через опции драйвера. В некоторых случаях драйвер должен инициализировать поле недопустимым значением.

Например, если драйвер устанавливает значения скорости и дуплекса в -1, он сможет понять после разбора опций, пытался ли пользователь явно установить скорость и/или дуплекс в конкретные значения. Тогда драйвер сможет решить, следует ли принудительно настроить конфигурацию линка или позволить произвести автонастройку/автоматическое определение линка.

Драйвер должен установить флаг NIC_FLAG_MULTICAST в поле flags перед разбором опций. Если указана опция nomulticast, этот флаг будет сброшен.



Warning: Функция getsubopt() изменяет строку опций, переданную ей, заменяя запятые на пробелы. Рекомендуется, чтобы драйвер создавал копию строки опций перед использованием getsubopt() для её разбора.

Возвращаемое значение:

EOK
Успешное завершение.
EINVAL
Ошибка в параметрах или при парсинге.

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Тематические ссылки:

nicinfo, nic_config_t




Предыдущий раздел: Библиотека разработки сетевых драйверов