Настройка и статус сетевых интерфейсов (kos_net.h)

API определен в заголовочном файле sysroot-*-kos/include/kos_net.h из состава KasperskyOS SDK.

API позволяет:

Сведения о функциях API приведены в таблице ниже.

Чтобы получить список сетевых интерфейсов, доступных в системе, необходимо вызвать функцию get_ifaces_addrs(). Эта функция возвращает в параметре pif связанный список структур ifaddrs, каждая из которых содержит данные о сетевом интерфейсе: имя, флаги, IP-адрес, маску подсети. Структура ifaddrs определена в заголовочном файле sysroot-*-kos/include/ifaddrs.h.

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

Пример вывода функции list_network_ifaces():

Name Type Running Address/mask

lo0 inet Yes ::1/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff

lo0 inet Yes fe80:1::1/ffff:ffff:ffff:ffff::

lo0 inet Yes 127.0.0.1/255.0.0.0

en0 mac Yes 52:58:00:12:34:bb

en0 inet Yes 10.0.2.15/255.255.255.

en0 inet Yes fe80:2::5058:ff:fe12:34bb/ffff:ffff:ffff:ffff::

Чтобы преобразовать текстовое представление IPv6-адреса в бинарный формат, необходимо использовать функцию ip6_parse_addr(). Через входной параметр ip_str принимает текстовое представление IPv6-адреса в соответствии с пунктами 2.2 и 2.3 спецификации RFC 4291 в формате:

<ipv6_адрес>[/<размер_префикса>]

Через выходной параметр dst_mask функция возвращает указатель на структуру sockaddr_in6, содержащую маску префикса в поле sin6_addr. Через выходной параметр dst_ip функция возвращает указатель на другую структуру sockaddr_in6, содержащую IPv6-адрес в поле sin6_addr. Структура sockaddr_in6 определена в заголовочном файле sysroot-*-kos/include/strict/posix/netinet/in.6.

Для ожидания появления сетевого интерфейса с требуемыми параметрами в списке доступных, необходимо использовать функцию wait_for_iface(). Через входной параметр name эта функция получает имя сетевого интерфейса, появление которого ожидается. Если этот параметр не указан (NULL), то будет ожидаться появление любого сетевого интерфейса, кроме тех, имена которых начинаются на lo*. Через входной параметр wait_flags функция получает флаги, которые определяют параметры ожидания: наличие IP-адресов и основных шлюзов. Эти флаги можно комбинировать. Время ожидания появления требуемого сетевого интерфейса в секундах задается в параметре timeout.

Чтобы настроить доступные сетевые интерфейсы с использованием IPv4- или IPv6-адресации API предоставляет две функции: configure_net_iface() и configure_net_iface6(). Для упрощения настройки сетевых интерфейсов предусмотрены макросы, которые можно использовать в качестве входных параметров для этих функций (см. в таблице ниже).

Макросы функций configure_net_iface() и configure_net_iface6()

Макрос

Описание

Значение по умолчанию

Использование в configure_net_iface()

Использование в configure_net_iface6()

DEFAULT_INTERFACE

Имя сетевого интерфейса, используемого для подключения

en0

Да

Да

DEFAULT_ADDR

IP-адрес, назначаемый сетевому интерфейсу

10.0.2.15

Да

Нет

DEFAULT_MASK

Маска подсети

255.255.255.0

Да

Нет

DEFAULT_GATEWAY

Основной шлюз

10.0.2.2

Да

Нет

DEFAULT_MTU

Максимальный размер передаваемого пакета в байтах (англ. Maximum Transmission Unit, MTU)

1500

Да

Нет

DEFAULT_TIMEOUT

Время ожидания в секундах

60

Да

Да

Сведения о функциях API

Функции kos_net.h

Функция

Сведения о функции

get_ifaces_addrs()

Назначение

Получает список доступных в системе сетевых интерфейсов.

Параметры

  • [out] pif – связанный список структур ifaddrs, содержащих данные о сетевых интерфейсах.

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

В случае успеха возвращает true, иначе возвращает false.

configure_net_iface()

Назначение

Настраивает сетевой интерфейс с использованием IPv4-адресации. Входные параметры ip, mask и gw должны быть указаны в формате X.X.X.X, где X – десятичное число от 0 до 255.

Параметры

  • [in] name – имя сетевого интерфейса, который требуется настроить.
  • [in] ip – IPv4-адрес, который будет назначен сетевому интерфейсу.
  • [in] mask – маска подсети.
  • [in] gw – IPv4-адрес основного шлюза.
  • [in] mtu – максимальный размер пакета в байтах.

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

В случае успеха возвращает true, иначе возвращает false.

ip6_parse_addr()

Назначение

Преобразует текстовое представление IPv6-адреса в бинарный формат, а также опционально формирует маску префикса на основе указанного размера префикса.

Параметры

[in] ip_str – текстовое представление IPv6-адреса.

  • [out] dst_mask – указатель на структуру sockaddr_in6, содержащую маску префикса в поле sin6_addr.
  • [out] dst_ip – указатель на структуру sockaddr_in6, содержащую IPv6-адрес в поле sin6_addr.

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

В случае успеха возвращает true, иначе возвращает false.

configure_net_iface6()

Назначение

Настраивает сетевой интерфейс с использованием IPv6-адресации.

Параметры

  • [in] name – имя сетевого интерфейса, который требуется настроить.

    [in] ip – IPv6-адрес согласно пунктам 2.2 и.2.3 спецификации RFC 4291.

  • [in] gw – IPv6-адрес основного шлюза согласно пункту 2.2 спецификации RFC 4291 или NULL, если указание параметра не требуется.

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

В случае успеха возвращает true, иначе возвращает false.

list_network_ifaces()

Назначение

Получает список сетевых интерфейсов, которые доступны в системе, и выводит данные о каждом сетевом интерфейсе в стандартный вывод.

Параметры

Нет.

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

В случае успеха возвращает true, иначе возвращает false.

wait_for_iface()

Назначение

Ожидает появление доступного сетевого интерфейса, который отвечает заданным флагами ожидания требованиям.

Параметры

  • [in] name – имя сетевого интерфейса, появление которого ожидается. Если этот параметр не указан (NULL), то ожидается появление любого сетевого интерфейса, кроме тех, имена которых начинаются на lo*.
  • [in] wait_flags – флаги ожидания:
    • IWF_EXISTS – ожидать появления сетевого интерфейса в списке доступных (используется по умолчанию всегда). Сетевой интерфейс при этом не обязательно должен быть активным.
    • IWF_IP4 – ожидать назначения IPv4-адреса сетевому интерфейсу.
    • IWF_IP6 – ожидать назначения IPv6-адреса сетевому интерфейсу.
    • IWF_GW4 – ожидать появления записи о шлюзе IPv4 в таблице маршрутизации. Запись может быть добавлена автоматически (через DHCP), так и вручную пользователем.
    • IWF_GW6 – ожидать появления записи о шлюзе IPv6 в таблице маршрутизации. Запись может быть добавлена автоматически (через DHCP), так и вручную пользователем.
  • [in] timeout – время ожидания сетевого интерфейса с заданными параметрами в секундах.

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

В случае успеха возвращает true, иначе возвращает false.

Пример использования функций API:

#include <kos_net.h>

int main(int argc, char *argv[])

{

// Ожидание сетевого интерфейса с именем en0 в течении 60 сек в списке доступных.

if (!wait_for_iface(DEFAULT_INTERFACE, IWF_EXISTS, DEFAULT_TIMEOUT))

{

perror("Network interface does not exists");

return EXIT_FAILURE;

}en0

// Настройка сетевого интерфейса en0 значениями по умолчанию.

if (!configure_net_iface(DEFAULT_INTERFACE, DEFAULT_ADDR, DEFAULT_MASK, DEFAULT_GATEWAY, DEFAULT_MTU))

{

perror("Can't configure network");

return EXIT_FAILURE;

}

}

В начало