48404

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

Дата последнего изменения: 23.05.2022 10:17:48

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

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

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

А именно:

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

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

CRC32.inv[i] = ~CRC32(MAC)[7-i], (3)*

где i=0 .. 7 — номер бита в байте

 

CRC32(MAC) — CRC32 от MAC-адреса назначения пакета по полиному 0x04C11DB7 (инв. 0xEDB88320)

 

Примечание:

* если для вычисления используется алгоритм с инверсным 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

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

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

Теги

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