48404

[i] Настройка и заполнение HASH-таблицы

Дата последнего изменения: 19.12.2024 09:45:23

Фильтрация по HASH таблице

Прием пакетов с фильтрацией по HASH-таблице осуществляется, если HASH-функция MAC-адреса принятого пакета соответствует маске в HASH-таблице контроллера. Для разрешения фильтрации принимаемых пакетов по HASH-таблице необходимо установить в «1» бит MCA_EN регистра R_CFG.

HASH-таблица выполняет роль маски для HASH-функции от MAC-адреса назначения пакета. HASH-функция вычисляется как «1», сдвинутая на значение 6-ти старших разрядов CRC32 от MAC-адреса назначения пакета.

Расчёт выполняется в три этапа:

* 1. CRC32.inv[i] = ~CRC32(MAC)[7-i], где i = 0 .. 7 — номер бита в байте, а CRC32(MAC) — CRC32 от MAC-адреса назначения пакета по полиному 0x04C11DB7 (инв. 0xEDB88320)

2. N.hash = CRC32.inv[31:24]

3. HASH(MAC) = 1 << N.hash

Примечание к расчету:

* Если для вычисления используется алгоритм с инверсным CRC, то данный шаг может быть пропущен.

Пример:

Пусть имеется пакет с МАС-адресом назначения:

01:23:45:67:89:AB (0х01, 0х23, 0х45, 0х67, 0х89, 0хAB)

Его CRC32 по полиному будет равен 0x1A0BE8B6

Инверсия производится побайтно в соответствии с шагом 3.:

0x1A после инверсии станет 0xE5, 0xE5 после реверса разрядов 0xA7;

- 0x0B после инверсии станет 0xF4, 0xF4 после реверса разрядов 0x2F;

- 0xE8 после инверсии станет 0x17, 0x17 после реверса разрядов 0xE8;

- 0xB6 после инверсии станет 0x49, 0x49 после реверса разрядов 0x92.

Итого имеем значение CRC32.inv = 0xA72FE892, где от полученного значения берутся 6 старших разрядов:

N.hash = CRC.inv[31:26] = (101001b) = 0x29 = 41.

HASH(MAC) = 1<<N.hash = 1<<41 = 0x0000_0200_0000_0000

Таким образом, при установке 41-го бита HASH-таблицы (необходимо записать в регистры HASH: HASH0=0x0, HASH1=0x0, HASH2=0x200, HASH3=0x0) будет разрешен прием пакетов c МАС-адресом 01:23:45:67:89:AB и других пакетов, для которых значение, содержащееся в 6 старших разрядах HASH-функции от MAC адреса назначения, также равняется 0x29 (41).

Сохранить статью в PDF

Документация

Программное обеспечение

Теги

Была ли статья полезной?