Я пытаюсь изменить фильтрацию по умолчанию для SFQ на фильтрацию на основе IP-адреса источника, где каждый IP-адрес относится к классу.
Я знаю, что могу создать SFQ с большим количеством делителей, например:
tc qdisc add ... sfq divisor 512
Затем я хочу отправить каждый src одному другому классу, используя что-то вроде:
tc filter add ... flow map key src addend -192.168.0.0 divisor 256
tc filter add ... flow map key src addend -192.168.4.0 divisor 256
Проблема в том, что первая линия будет отправлять трафик 192.168.0.x в класс 1-256, но вторая линия также будет отправлять трафик из 192.168.4.0 в классы 1-256.
Есть ли способ установить смещение? Я проверял побитовые операторы, но уверен, что это достижимо.
Я знаю, что могу использовать хеш вроде:
tc filter add ... flow hash keys src divisor 512
Но, поскольку исходный IP-адрес будет хеширован, разные IP-адреса src могут заканчиваться в одной и той же очереди, а не каждый по очереди.
Это формирование будет установлено на высокопроизводительном маршрутизаторе (20 Гбит / с) с 5120 различными IP-адресами src, поэтому я не могу настроить одну очередь для каждого IP-адреса или установить множество фильтров, поэтому я пытаюсь найти более оптимальный способ сделать это. .
Спасибо!
Я считаю, что вы, возможно, сможете получить желаемый результат, используя фильтр и nfct-src
направлять пакеты в очереди на основе IP-адреса источника. Вы также можете добавить маску фильтра, чтобы решить проблему с более чем 256 очередями.
tc filter add dev $dev parent $class_index: handle 1 flow divisor 256 map key nfct-src and 0xff