На странице руководства 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 из них, и ошибка исчезла.
Я надеюсь, что это поможет кому-то в будущем
Ура
(Кстати: как мне отметить это "РЕШЕННЫМ" ??