Назад | Перейти на главную страницу

tc filter… ht HANDLE… не допускает сегментов по 8 бит

На странице руководства TC-u32 указано, что HANDLE:

HANDLE := { u12_hex_htid:[**u8_hex_hash:[u12_hex_nodeid]** | 0xu32_hex_value }

поэтому размер ведра должен находиться в диапазоне от 0x00 до 0xff, поскольку это значение u8.

Проблема в том, что я не могу создать ведро больше 0x1f (пять бит). Я получил: Ответы RTNETLINK: Недействительный аргумент. Ошибка при разговоре с ядром.

/sbin/tc filter add dev ifb0 parent 1:0 protocol ip prio 5 u32 ht 5:2: match ip src 10.16.240.0/24 hashkey mask 0x000000ff at 12 link 100:

в порядке

/sbin/tc filter add dev ifb0 parent 1:0 protocol ip prio 5 u32 ht 5:20: match ip src 10.16.240.0/24 hashkey mask 0x000000ff at 12 link 100:

приводит к ошибке.

Окружающая среда:

iproute2 версия 4.3.0-1ubuntu3.16

Ubuntu 16.04.5 LTS

Есть подсказки?

tkx

Чтобы ответить на мой собственный вопрос: я неправильно понял, что корзина должна быть больше, чем количество фильтров, которые я намеревался хэшировать, но нет. Бакет должен быть больше или равен (ограничен 0xff), чем самый большой хэш, который я собираюсь использовать в нем.

Итак, поскольку я намеревался использовать внутри ведра 26 фильтров, я создал ведро «делитель 32». И поскольку мои 26 хэшей в этом ведре случайным образом варьируются от 0 до 255 (последний октет IP-адреса), я переполнился, и ядро ​​пожаловалось на это.

Затем я создал корзину, используя «делитель 256», несмотря на то, что я буду использовать только 26 из них, и ошибка исчезла.

Я надеюсь, что это поможет кому-то в будущем

Ура

(Кстати: как мне отметить это "РЕШЕННЫМ" ??