Тип данных MAC-адрес

Переменная типа mac_addr_t служит для хранения значения MAC-адреса. Тип данных MAC-адрес - это абстрактный тип данных. Его нельзя использовать напрямую со стандартными унарными или бинарными операторами C.

Поддерживаются только локальные и глобальные переменные типа mac_addr_t.

Переменные этого типа можно также хранить в именованном массиве как ключ или как значение.

Язык Vue поддерживает следующие свойства и операции для переменных типа MAC-адрес:

Объявление переменной MAC-адреса

mac_addr_t m1;           // глобальная переменная типа MAC-адрес 
__auto mac_addr_t m2;                             // автоматическая переменная типа MAC-адрес 
m2 = __etherhdr->src_addr;                        // сохранить исходный MAC-адрес в локальной переменной
mac_aso[“src_mac_addr”] = __etherhdr->src_addr ;  // сохранить в именованном массиве. 

Спецификаторы signed, unsigned, register, static, thread и kernel не поддерживаются для переменных типа mac_addr_t.

Операции присвоения

Оператор присвоения (=) позволяет присвоить одну переменную типа mac_addr_t другой переменной типа mac_addr_t. Исходные значения переменной заменяются. Преобразование типа mac_addr_t и другие типы и наоборот запрещено.

В следующем примере переменная mac_addr_t m1 присваивается переменной m2.

mac_addr_t m1, m2; // Объявление двух переменных MAC-адресов. 
m1 = __etherhdr->src_addr;      // Сохранить исходный MAC-адрес пакета в переменной m1. 
m2 = m1 ;                       // Сохранить значение переменной m1 в переменной m2.

Операция сравнения

Для переменных mac_addr_t разрешены только операторы равенства (==) и неравенства (!=). Результат оператора равенства истинный (1), если обе переменных содержат один и тот же MAC-адрес, и ложный (0) в противном случае.

Оператор неравенства имеет противоположное поведение. Другие операторы сравнения (>=, >, < и =<) запрещены для переменных типа mac_addr_t.
if( m1 == m2)                  // сравнение двух переменных типа mac_addr_t. 
printf(“MAC-адреса равны”); else printf(“MAC-адреса неравны”);

Вывод переменных типа MAC-адрес

Переменные типа mac_addr_t можно выводить с помощью спецификатора формата “%M” функции printf() сценария Vue. Именованные массивы, в которых переменные типа mac_addr_t играют роль ключей и (или) значений, могут выводиться с помощью функции print().
printf(“ Исходный MAC-адрес=[%M]\n”, __etherhdr->src_addr); 
mac_aso[“src_mac_address”] = __etherhdr->src_addr ; // Сохранить исходный MAC-адрес как значение в именованный массив mac_aso. 
print(mac_aso);
Ограничения переменной типа MAC-адрес
  • Нельзя объявить массив переменных mac_addr_t.
  • Переменные mac_addr_t не могут быть элементом структуры или объединения.
  • Запрещены указатели на переменные типа mac_addr_t.
  • Запрещено преобразование переменных типа mac_addr_t в любой другой тип и переменных любых других типов в тип mac_addr_t.
  • Нельзя использовать арифметические операторы (+, -, *, /, ++, -- и пр.) с переменными типа mac_addr_t.