Тип данных IP-адрес
Это абстрактный тип данных, поэтому его нельзя напрямую использовать со стандартными унарными и бинарными операторами языка C. Поддерживаются только локальные и глобальные переменные типа ip_addr_t. Переменные этого типа можно также хранить в именованном массиве как ключ или как значение.
Vue поддерживает следующие свойства и операции для переменных типа IP-адрес:
ip_addr_t i1; // глобальная переменная типа ip_addr_t
__auto ip_addr_t i2; // автоматическая переменная типа ip_addr_t
ip_addr_t i2 = __ip4hdr->src_addr; // исходный IP-адрес сохраняется в локальной переменной ip_addr_t.
ip_aso[“src_ip_addr”] = __ip4hdr->src_addr; // сохранить в именованном массиве.
Спецификаторы signed, unsigned, register, static, thread и kernel не поддерживаются для переменных типа ip_addr_t.
Операция присвоения
Оператор присвоения (=) позволяет присвоить одной переменной типа ip_addr_t значение другой переменной типа ip_addr_t. Кроме того, он позволяет присвоить переменной типа ip_addr_t постоянный IP-адрес или имя хоста. Исходные значения переменной заменяются. Преобразование типа ip_addr_t в другие типы и наоборот запрещено.
ip_addr_t i1, i2; // Объявление двух переменных IP-адреса.
ip_addr_t i3, i4, i5; // Объявление трех переменных типа IP-адрес.
i1 = __ip4hdr->src_addr; // Сохранить исходный IP-адрес пакета в переменной i1.
i2 = i1 ; // Сохранить значение переменной i1 в переменной i2.
i3 = “10.10.10.1”; // Переменной i3 присваивается постоянный адрес IPv4.
i4 = “fe80::2c0c:33ff:fe48:f903”; // Переменной i4 присваивается адрес Ipv6.
i5 = “example.com”; // Переменной i5 присваивается имя хоста.
// Копирование содержимого i1 в i2.
Операция сравнения
Для переменных ip_addr_t разрешены только операторы равенства (==) и неравенства (!=). Переменные типа ip_addr_t можно сравнивать только друг с другом и со строковой константой (в этом случае IP-адрес или имя хоста указывается в двойных кавычках, например “192.168.1.1” или “example.com”).
Результат оператора равенства истинный (1), если обе переменных содержат одинаковые IP-адреса одинакового типа (IPv4 или IPv6). И ложный (0) в противном случае. Оператор неравенства имеет противоположное поведение. Другие операторы сравнения (>=, >, < и =<) запрещены для переменных типа ip_addr_t.
if( i1 == i2) // сравнение двух переменных типа ip_addr_t.
// Строка IP-адреса
printf(“IP-адреса равны”);
else printf(“IP-адреса не равны”);
или
if( i1 == “192.168.1.1”) // сравнение переменной типа ip_addr_t со строковой константой.
printf(“IP-адреса равны”);
else printf(“IP-адреса не равны”);
or
if (i1 = “example.com”) // сравнение переменной типа ip_addr_t и константы
// Строка IP-адреса
printf(“IP-адреса равны”);
else printf(“IP-адреса не равны”);
Вывод переменных типа IP-адресПеременные типа ip_addr_t можно выводить с помощью спецификаторов формата “%I” (вывод в десятичном формате с точками или 16-ричном формате) и “%H” (вывод имени хоста) функции printf() сценария Vue. При выводе имени хоста выполняется продолжительная по времени операция поиска в DNS. Это необходимо учитывать в сценариях VUE.
printf(“ Исходный IP-адрес=[%I]\n”, __ip4hdr->src_addr);
ip_aso[“src_ip_address”] = __ip4hdr->src_addr ; // Сохранить исходный IP-адрес как значение в именованном массиве
print(ip_aso);
- Нельзя объявить массив переменных ip_addr_t.
- Запрещены указатели на переменные типа ip_addr_t.
- Запрещено преобразование переменных типа ip_addr_t в любой другой тип и переменных любых других типов в тип ip_addr_t.
- Нельзя использовать арифметические операторы (+, -, *, /, ++, -- и пр.) с переменными типа ip_addr_t.