Функция парсинга строки параметров драйвера
#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 сохраняет результаты.
 | Драйвер обычно инициализирует поля структуры nic_config_t значениями по умолчанию до того, как начнется разбор опций. Это позволяет пользователю переопределить значения по умолчанию через опции драйвера. В некоторых случаях драйвер должен инициализировать поле недопустимым значением.
Например, если драйвер устанавливает значения скорости и дуплекса в -1 , он сможет понять после разбора опций, пытался ли пользователь явно установить скорость и/или дуплекс в конкретные значения. Тогда драйвер сможет решить, следует ли принудительно настроить конфигурацию линка или позволить произвести автонастройку/автоматическое определение линка.
Драйвер должен установить флаг NIC_FLAG_MULTICAST в поле flags перед разбором опций. Если указана опция nomulticast, этот флаг будет сброшен. |
 | Функция getsubopt() изменяет строку опций, переданную ей, заменяя запятые на пробелы. Рекомендуется, чтобы драйвер создавал копию строки опций перед использованием getsubopt() для её разбора. |
- EOK
- Успешное завершение.
- EINVAL
- Ошибка в параметрах или при парсинге.
ЗОСРВ «Нейтрино»
- Нет
- Обработчик прерываний
- Нет
- Обработчик сигналов
- Нет
- В потоке
- Да
nicinfo, nic_config_t
Предыдущий раздел: Библиотека разработки сетевых драйверов